【发布时间】:2011-07-31 02:09:15
【问题描述】:
我有一个如下所示的表格:
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”子句。
【问题讨论】:
-
你的版本是什么?我只是因为这个错误报告才问:bugs.mysql.com/bug.php?id=28904
-
您报告的 ts 列中填充了“0000-00-00 00:00:00”确实与我的猜测相矛盾。与 NO_ZERO_DATE 模式有关,但请查看dev.mysql.com/doc/refman/5.0/en/…
-
我想可能是这样。许多行都被正确标记,但有些可能有重复的值。我会尝试升级。
-
对查询中的日期时间列使用 null 对我有用。
-
根据dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html,当前时间戳将仅在行中的值之一更改时更新(即,如果所有值保持不变,
lastconnection列也不会更新,即使您运行UPDATE查询)
标签: mysql sql timestamp sql-update