MySql触发器插入时间戳错误的新条目
我有一个版本为5.0.95的旧数据库(很遗憾,我无法升级) 在这个数据库中,我有一个表MySql触发器插入时间戳错误的新条目,mysql,triggers,Mysql,Triggers,我有一个版本为5.0.95的旧数据库(很遗憾,我无法升级) 在这个数据库中,我有一个表clients\u states: CREATE TABLE `clientes_states` ( `id` int(11) NOT NULL auto_increment, `client_id` int(11) NOT NULL, `state_id` int(11) NOT NULL, `date` datetime NOT NULL, PRIMARY KEY (`id`) ) E
clients\u states
:
CREATE TABLE `clientes_states` (
`id` int(11) NOT NULL auto_increment,
`client_id` int(11) NOT NULL,
`state_id` int(11) NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1239670 DEFAULT CHARSET=latin1 ROW_FORMAT=FIXED;
对于客户端状态的每次更改,都会生成一个新条目。因此,该表非常庞大,这使得获取所有客户端的最后状态变得非常复杂
为了方便地访问每个客户端的当前状态,我创建了下表,并添加了一个触发器:
CREATE TABLE `actual_clients_states` (
`id` int(11) NOT NULL auto_increment,
`client_id` int(11) NOT NULL,
`state_id` int(11) NOT NULL,
`updated_at` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `client_id` (`client_id`)
) ENGINE=InnoDB AUTO_INCREMENT=21022 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
我有两个数据库,一个用于测试,一个用于暂存。出于某种原因,
updated_at
字段在登台服务器上被更新为错误的日期(大约一个月前),但在测试服务器上工作正常
知道问题出在哪里吗?出于某种原因,登台服务器上的更新日期(大约一个月前)字段被更新为错误日期。不,它只是保持不变。在列定义中添加
'ON UPDATE CURRENT\u TIMESTAMP'
选项。我猜您指的是表实际的\u客户端状态
?当然,这是唯一一个在列中有updated\u的表。
CREATE TRIGGER clients_states_insert
AFTER INSERT
ON clientes_states FOR EACH ROW
INSERT INTO actual_clients_states (client_id, state_id)
VALUES (new.client_id, new.state_id)
ON DUPLICATE KEY UPDATE state_id=NEW.state_id;