MySQL 8中如何使用DROP DEFAULT?为何语法报错?
MySQL 8.0中
ALTER COLUMN DROP DEFAULT报错的原因及正确用法 报错根源:语法格式错误
你之前的两种报错写法,问题出在多写了列的数据类型integer。MySQL的ALTER COLUMN ... DROP DEFAULT语法仅用于修改列的默认值属性,不需要重复指定列的数据类型。你搜到的通用语法大概率是其他数据库(比如PostgreSQL)的写法,和MySQL的语法规范不兼容。
正确的移除默认值语法
MySQL中移除列默认值的正确写法有两种:
-- 带COLUMN关键字 ALTER TABLE comments ALTER COLUMN commentable_id DROP DEFAULT; -- 省略COLUMN关键字 ALTER TABLE comments ALTER commentable_id DROP DEFAULT;
关于MODIFY COLUMN的替代方案
你用MODIFY COLUMN commentable_id integer DEFAULT null能生效,是因为你的列允许为NULL,而MySQL中允许为NULL的列,默认的默认值就是NULL。但这个操作和DROP DEFAULT的语义有细微差别:
DROP DEFAULT是完全移除默认值的定义,让列回归数据库的默认行为MODIFY COLUMN ... DEFAULT null是主动设置默认值为NULL,虽然最终效果一致,但属于“设置”而非“移除”操作
是否是MySQL 8的改动导致?
不是。这个语法规则在MySQL 5.x及后续版本中一直保持一致:ALTER COLUMN仅用于调整默认值、是否允许为NULL这类属性,不需要指定数据类型;只有MODIFY COLUMN或CHANGE COLUMN这类修改列结构的操作,才需要声明数据类型。
内容的提问来源于stack exchange,提问作者Max Williams
相关产品推荐
相关产品推荐

