我的数据库是MySql 5.6。
我想使用CURRENT_TIMESTAMP作为类型为TIMESTAMP(3)的属性的默认值。
但是我得到了错误:
错误1067(42000):“更新”的默认值无效
我认为是因为CURRENT_TIMESTAMP仅以秒为单位。
CURRENT_TIMESTAMP
如何将timestamp小数部分的当前时间设置为默认值?
timestamp
根据文档timestamp并datetime输入列:
datetime
如果TIMESTAMP或DATETIME列定义在任何地方都包含显式的小数秒精度值,则在整个列定义中必须使用相同的值。 这是允许的: CREATE TABLE t1 ( ts TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) );
如果TIMESTAMP或DATETIME列定义在任何地方都包含显式的小数秒精度值,则在整个列定义中必须使用相同的值。
TIMESTAMP
DATETIME
这是允许的:
CREATE TABLE t1 ( ts TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE
CURRENT_TIMESTAMP(6) );
其他例子 :
mysql> create table tbl_so_q23671222_1( ts timestamp(3) default now() ); ERROR 1067 (42000): Invalid default value for 'ts' mysql> create table tbl_so_q23671222_1( ts timestamp(3) default now(3) ); Query OK, 0 rows affected (0.59 sec) mysql> create table tbl_so_q23671222_2( ts timestamp(3) default current_timestamp ); ERROR 1067 (42000): Invalid default value for 'ts' mysql> create table tbl_so_q23671222_2( ts timestamp(3) default current_timestamp(3) ); Query OK, 0 rows affected (0.38 sec) mysql> desc tbl_so_q23671222_1; +-------+--------------+------+-----+----------------------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+----------------------+-------+ | ts | timestamp(3) | NO | | CURRENT_TIMESTAMP(3) | | +-------+--------------+------+-----+----------------------+-------+ 1 row in set (0.01 sec) mysql> desc tbl_so_q23671222_2; +-------+--------------+------+-----+----------------------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+----------------------+-------+ | ts | timestamp(3) | NO | | CURRENT_TIMESTAMP(3) | | +-------+--------------+------+-----+----------------------+-------+ 1 row in set (0.01 sec)
请参阅 : TIMESTAMP和DATETIME的初始化和更新