我有一个mysql表“ping_status”
CREATE TABLE `ping_status` (
`id` int(11) NOT NULL,
`ping_status` tinyint(4) DEFAULT '0',
`change_status` tinyint(4) DEFAULT '0',
`ts` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
)
ts = time
更改时列ping_status
如果仅ts
更改,我如何更新列ping_status
。如果change_status发生更改,则ts
不应更新;
答案 0 :(得分:0)
使用Trigger
CREATE TRIGGER myTrigger AFTER UPDATE ON myTable
FOR EACH ROW
BEGIN
if NEW.ping_status<> OLD.ping_status Then
--Update ts here
end If
if NEW.change_status<> OLD.change_statusThen
update table1 set ts=old.ts where id=new.id
end If
END
答案 1 :(得分:0)
从docs开始,“如果列自动更新,当行中任何其他列的值从其当前值更改时,它将自动更新为当前时间戳”。这意味着当您更新ping_status或change_status时,ts将被设置为current_timestamp。因此,删除ON UPDATE CURRENT_TIMESTAMP
并在更新ping_status时显式更新ts。
update ping_status set ping_status=some_value, ts=now() where id=some_value;
由于您仍然有DEFAULT CURRENT_TIMESTAMP
任何新值,您插入的内容仍将获得当前时间戳。
除此之外,最好避免在可能的情况下使用公共字段和表名。