今日,怂怂就为大家带来一篇mysql遇到 ON UPDATE clause 不能实现建表的问题解决;具有很好的参考价值,一起跟怂怂过来吧,如若对您有所帮助,别忘了在文章右上角点个赞哦。谢谢。
从高版本的mysql导数据到低版本,执行语句:
CREATE TABLE `tb_order_status` (
`order_id` bigint(20) NOT NULL COMMENT '订单id',
`status` int(1) DEFAULT NULL COMMENT '状态:1、未付款 2、已付款,未发货 3、已发货,未确认 4、交易成功 5、交易关闭 6、已评价',
`create_time` datetime DEFAULT NULL COMMENT '订单创建时间',
`payment_time` datetime DEFAULT NULL COMMENT '付款时间',
`consign_time` datetime DEFAULT NULL COMMENT '发货时间',
`end_time` datetime DEFAULT NULL COMMENT '交易完成时间',
`close_time` datetime DEFAULT NULL COMMENT '交易关闭时间',
`comment_time` datetime DEFAULT NULL COMMENT '评价时间',
PRIMARY KEY (`order_id`),
KEY `status` (`status`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='订单状态表';
会报错:
[Err] 1294 - Invalid ON UPDATE clause for 'comment_time' column
---------------------
解决方式一【更新MySQL版本至5.6.31以上】:
可以查看下mysql版本号:
show variables like 'innodb_version';
即对于5.6.5之前的MySQL版本,不支持多条同时使用 DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT TIMESTAMP特性,使用mysql -v查了下我现在使用的mysql版本为5.5.56,即不支持多条同时使用。因此将mysql更新至5.6.31,问题解决。
解决方式二【使用触发器来替代】
ps:还是以上sql为例演示:
修改如下:
ps:当执行update操作是,并且字段有ON UPDATE CURRENT_TIMESTAMP属性。则字段无论值有没有变化,它的值也会跟着更新为当前UPDATE操作时的时间,即为系统时间。
--------------------------------------拓展-------------------------------------
要想更为深入了解下ON UPDATE CURRENT_TIMESTAMP是怎么使用的,可以查看下以下这篇,值得学习。