MySQL ON UPDATE CURRENT_TIMESTAMP不更新 - 代码日志

MySQL ON UPDATE CURRENT_TIMESTAMP不更新

我有一张桌子,看起来像这样:

CREATE TABLE IF NOT EXISTS `Hosts` (
`id` int(128) NOT NULL AUTO_INCREMENT,
`IP` varchar(15) NOT NULL DEFAULT '',
`Port` varchar(5) NOT NULL DEFAULT '',
`Password` varchar(32) NOT NULL DEFAULT '',
`Username` varchar(32) NOT NULL DEFAULT '',
`Tid` varchar(32) NOT NULL DEFAULT '',
`EquipType` varchar(64) NOT NULL DEFAULT '',
`Version` varchar(128) DEFAULT NULL,
`Status` varchar(10) NOT NULL DEFAULT '',
`Location` varchar(128) NOT NULL DEFAULT '',
`Lastconnection` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
`Lastbackup` date NOT NULL DEFAULT '0000-00-00',
`Backupstatus` varchar(64) NOT NULL DEFAULT '',
`Backupmsg` text,
`Backupfile` varchar(30) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `IP` (`IP`),
KEY `Tid` (`Tid`),
KEY `EquipType` (`EquipType`),
KEY `Status` (`Status`),
KEY `Lastbackup` (`Lastbackup`),
KEY `Backupstatus` (`Backupstatus`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=716 ;

在我看来,这意味着随时更新一行,“Lastconnection”字段应该加上当前时间戳。但是,当我运行像:

update Hosts set Backupstatus = 'FAIL',  Backupmsg = 'Connection timed out' where Tid = 'SITE001'

最后连接保持’0000-00-00 00:00:00’。有一个我没有看到的数据库问题,或者我完全误解了“ON UPDATE CURRENT_TIMESTAMP”子句。

在更新时是否尝试使用该字段的null?

您也可以尝试将默认值设置为CURRENT_TIMESTAMP,而不是0000-00-00 00:00:00。

然而,每当我想创建和更新时间,我总是使用以下内容:

...
CREATED timestamp NOT NULL default '0000-00-00 00:00:00',
UPDATED timestamp NOT NULL default now() on update now(),
....

我现在使用(),因为是CURRENT_TIMESTAMP的一个别名,它是较短的。最后,表结构获得CURRENT_TIMESTAMP,所以别担心。

使用CREATED字段的技巧是记住在两个字段上使用NULL作为INSERT语句,对于不需要的UPDATE语句:

INSERT INTO mytable (field1, field2, created, updated)
VALUES ('foo', 'bar', null, null);
http://stackoverflow.com/questions/5571323/mysql-on-update-current-timestamp-not-updating

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:MySQL ON UPDATE CURRENT_TIMESTAMP不更新