gpt4 book ai didi

mysql - 如何从现有列中删除 ON UPDATE CURRENT_TIMESTAMP?

转载 作者:IT老高 更新时间:2023-10-29 00:09:49 25 4
gpt4 key购买 nike

我做了一个 mysql 5.5 数据库的转储并将其加载到 5.6 服务器中。

转储将 ON UPDATE CURRENT_TIMESTAMP 添加到一堆以前没有的列中。

我正在搜索将删除 ON UPDATE CURRENT_TIMESTAMP 规则而不进行任何其他更改的 ALTER TABLE 语句。在我的想象中,它应该类似于 ON UPDATE NOOPON 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 会产生什么影响。该选项会改变现有表的行为,还是只会改变 future CREATE TABLE 命令的解释?打开它会以某种方式帮助我修复损坏的列吗?

更新:

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

如果没有explicit_defaults_for_timestamp,两步过程肯定不会在5.6 服务器上产生正确的结果;这表明 5.6 没有完美地模仿这种模式下的旧行为,或者旧服务器从未像我认为的那样做。我不确定是哪个。

最佳答案

ALTER TABLE mytable
CHANGE mycolumn
mycolumn TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

相信这将重置并使 ON UPDATE 无效。这将有效地使这个定义:

CREATE TABLE mytable (
# Other Columns
mycolumn timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
)

换成这个:

CREATE TABLE mytable (
# Other Columns
mycolumn timestamp NOT NULL default CURRENT_TIMESTAMP
)

如果您想完全重置该列,您应该能够像这样简单地重新定义它:

ALTER TABLE mytable
CHANGE mycolumn
mycolumn TIMESTAMP NOT NULL;

关于mysql - 如何从现有列中删除 ON UPDATE CURRENT_TIMESTAMP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31839542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com