在条件下更新MySQL时间戳

时间:2014-08-09 06:36:12

标签: mysql

我有一个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不应更新;

2 个答案:

答案 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任何新值,您插入的内容仍将获得当前时间戳。

除此之外,最好避免在可能的情况下使用公共字段和表名。