如何更改 mysql 表列的默认值?

Posted

技术标签:

【中文标题】如何更改 mysql 表列的默认值?【英文标题】:How do I alter a mysql table column defaults? 【发布时间】:2010-12-18 17:14:03 【问题描述】:

我有一个表,其列类型为 timestamp,默认为 current_timestamp,每次更新时更新为 current_timestamp

我想删除此列的“更新时”功能。如何编写 alter 语句?

我尝试了以下方法:

ALTER TABLE mytable alter column time  set DEFAULT now();

但这没有用。

【问题讨论】:

你确定它没有使用触发器来更新它? 这个问题应该迁移到 StackExcange:数据库管理员 【参考方案1】:

Pete 几乎是正确的,但“更改”使用了错误的语法:

ALTER TABLE mytable CHANGE `time` `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

请注意,您必须重复列名。此外,请确保您使用反引号而不是单引号来转义列名时间,这样可以防止将其解释为 mysql 列类型的时间。

通过指定 CURRENT_TIMESTAMP 的 DEFAULT,MySQL 将不再自动更新该列。来自MySQL Manual:

使用 DEFAULT CURRENT_TIMESTAMP 子句且没有 ON UPDATE 子句时,该列的默认值具有当前时间戳,但不会自动更新。

【讨论】:

【参考方案2】:

您不能 AFAIK 使用 NOW() 等函数作为默认值。

试试

ALTER TABLE `mytable` CHANGE `time` `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

(编辑添加转义和第二次使用字段名称)

【讨论】:

得到以下信息:mysql> ALTER TABLE 消息 CHANGE time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP; ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“NOT NULL DEFAULT CURRENT_TIMESTAMP”附近使用正确的语法 mysql> ALTER TABLE 消息 CHANGE column time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP; ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“NOT NULL DEFAULT CURRENT_TIMESTAMP”附近使用正确的语法 抱歉忘记加转义,字段名来了两次。

以上是关于如何更改 mysql 表列的默认值?的主要内容,如果未能解决你的问题,请参考以下文章

MySql 表列中未设置默认值

如何在代码中的sql表列中插入默认值

mysql里的表怎么改列的默认值

Laravel:迁移更改列的默认值(布尔值)

如何使用 MYSQL 在最终表中包含所有列的默认值为 0 的缺失行?

设置点列的默认值