解决Mysql5.5不能同时设置两个CURRENT_TIMESTAMP

需求是,mysql一张表中同时有两个字段需要有这样的功能,当要向数据库执行 insert操作时,如果有个 timestamp字段属性设为 CURRENT_TIMESTAMP,则无论这个字段有没有set值都插入当前系统时间

遇到了这样一个错误

1
2
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_TIMESTAMP,
`end_time` datetime NOT NULL CURRENT_TIMESTAMP,

原因是我使用的mysql5.5 它不支持一条sql中同时出现两个包含 CURRENT_TIMESTAMP 的语句

解决方案: 触发器

我们可以用它去监听指定的表,当表发生变化的时候,执行我们指定的操作

语法

1
2
3
4
5
CREATE TRIGGER [自定义名字] 
trigger_time (一般为BEFORE 或 AFTER)
trigger_event ON [监听的表名]
FOR EACH ROW
[要执行的sql,函数]

原sql

1
2
`start_time` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP,
`end_time` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP,

修改后

1
2
3
4
5
6
7
8
9

`start_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`end_time` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP,

CREATE TRIGGER `update_time_trigger`
BEFORE
UPDATE ON `tb_promotion`
FOR EACH ROW
SET NEW.`start_time` = NOW()