如何更改 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 表列的默认值?的主要内容,如果未能解决你的问题,请参考以下文章