我的mysql表中有一个字段,其数据类型为datetime
,默认值为CURRENT_TIMESTAMP
。我以为它会将此值仅用于插入。这在插入和更新上都发生了变化。这是对的吗?
我没有ON UPDATE CURRENT_TIMESTAMP
,也没有更新该列。
我的问题是,如果我只有一个数据类型为datetime
的列,默认为CURRENT_TIMESTAMP
,即使ON UPDATE CURRENT_TIMESTAMP
不存在,它会在记录更新时更改列吗?< / p>
答案 0 :(得分:1)
听起来好像你有:
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
然而,似乎你想要:
DEFAULT CURRENT_TIMESTAMP
这两者之间的区别在于,第一个将更新插入和更新的时间戳列,第二个将仅在插入期间提供TIMESTAMP,并且在更新行时 NOT 更新
您可以使用MySQL中的DESCRIBE
函数来检查您的表正在使用的内容,以描述特定表的架构。
http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html
答案 1 :(得分:0)
同时使用DEFAULT CURRENT_TIMESTAMP
和ON UPDATE CURRENT_TIMESTAMP
,该列的当前时间戳为其默认值,并自动更新为当前时间戳。
CREATE TABLE t1 (
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
既不是DEFAULT CURRENT_TIMESTAMP
也不是ON UPDATE CURRENT_TIMESTAMP
,它与指定DEFAULT CURRENT_TIMESTAMP
和ON UPDATE CURRENT_TIMESTAMP
相同。
CREATE TABLE t1 (
ts TIMESTAMP
);
使用DEFAULT
子句但没有ON UPDATE CURRENT_TIMESTAMP
子句,该列具有给定的默认值,并且不会自动更新为当前时间戳。
默认值取决于DEFAULT
子句是指定CURRENT_TIMESTAMP
还是常量值。使用CURRENT_TIMESTAMP
时,默认值为当前时间戳。
CREATE TABLE t1 (
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);