时间:2021-07-01 10:21:17 帮助过:50人阅读
换句话说,你可以使用当前的时间戳去初始化值和自动更新,或者是其中之一,也可以都不是。(比如,你在定义的时候可以指定自动更新,但并不初始化。)下面的字段定义说明了这些情况:
自动初始化和更新: `ts` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 只自动初始化: `ts` timestamp DEFAULT CURRENT_TIMESTAMP 只自动更新 `ts` TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP 只是给一个常量(注:0000-00-00 00:00:00) `ts` timestampDEFAULT 0
注意:如果不使用DEFAULT或ON UPDATE子句,那么它等同于DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
示例:
CREATE TABLE `test` ( `ww` VARCHAR( 9 ) NOT NULL , `t1` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , `t2` TIMESTAMP NOT NULL ) ENGINE = MYISAM
这个情况下,数据插入时,t1会记录当前时间,t2为默认值(0000-00-00 00:00:00),等同下面的语句:
CREATE TABLE `test` ( `ww` VARCHAR( 9 ) NOT NULL , `t1` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , `t2` TIMESTAMP NOT NULL DEFAULT ‘0000-00-00 00:00:00‘ ) ENGINE = MYISAM
根据上面注意事项,示例的创表语句完整的语句应当为:
CREATE TABLE `test` ( `ww` VARCHAR( 9 ) NOT NULL , `t1` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , `t2` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE = MYISAM
曾经想这样设计一个表,这个表有两个timestamp列,一个可以记录更新时间,一个可以记录初始时间,但是尝试多次以后,我发现mysql好像做不到这一点,不知道这个是mysql的缺陷还是自我优化,因为,这个功能可以使用datetime实现记录初始化的时间,只是需要insert的时候指定一下.
MySQL的timestamp类型自动更新问题
标签:比较 设计 根据 ble 导致 varchar div 建表 nbsp