删除mysql on update_mysql – 如何从现有列中删除ON UPDATE CURRENT_TIMESTAMP?

我做了一个

mysql 5.5数据库的转储并将其加载到5.6服务器.

转储将UPDATE CURRENT_TIMESTAMP添加到之前没有它的一堆列中.

我正在搜索ALTER TABLE语句,该语句将删除ON UPDATE CURRENT_TIMESTAMP规则而不进行任何其他更改.在我的想象中它应该是ON UPDATE NOOP或ON UPDATE NO_CURRENT_TIMESTAMP.

ON UPDATE JUST_BE_A_NORMAL_COLUMN?

我尝试在mysql工作台中使用“清除默认”选项,它与它应该做的相反 – 它给了列一个默认值!

我能够通过ALTER TABLE t ALTER COLUMN c DROP DEFAULT摆脱默认值,因此INSERT中的列是强制性的(就像它在转储/重新加载之前一样,正如我所希望的那样)但UPDATE上的不需要的行为仍然存在.

我没有启用explicit_defaults_for_timestamp选项.如果我刚刚开始新的我肯定会使用那个选项,因为它似乎更加理智.但是因为我已经在5.5中按照我想要的方式配置了列,所以我希望它们在转移到5.6时保持相同的语义.显然mysqldump还不够聪明.

此时我不确定我是否理解启用explicit_defaults_for_timestamp会产生什么影响.该选项是否会更改现有表的行为,还是仅更改对未来CREATE TABLE命令的解释?将它打开以某种方式帮我修复破碎的列?

更新:

类似的问题是here但是那个是关于创建一个新表而不是改变现有列.实际上,这个问题是我在5.5服务器上创建表时用作指南的问题.我使用了两步过程:使用默认值0创建以禁止ON UPDATE CURRENT_TIMESTAMP,然后删除默认值.

如果没有explicit_defaults_for_timestamp,两步程序肯定不会在5.6服务器上产生正确的结果;这是一个标志,5.6无法完美地模仿这种模式下的旧行为,或旧服务器从未做过我认为它正在做的事情.我不能确定哪个.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值