如何更改列并更改默认值?

时间:2012-07-03 13:51:43

标签: mysql sql

尝试更改列的数据类型并设置新的默认值时出现以下错误:

ALTER TABLE foobar_data ALTER COLUMN col VARCHAR(255) NOT NULL SET DEFAULT '{}';
  

错误1064(42000):您的SQL语法有错误;检查   手册,对应右边的MySQL服务器版本   在第1行'VARCHAR(255)NOT NULL SET DEFAULT'{}''附近使用的语法

7 个答案:

答案 0 :(得分:237)

ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}';

第二种可能做同样的事情(感谢juergen_d):

ALTER TABLE foobar_data CHANGE COLUMN col col VARCHAR(255) NOT NULL DEFAULT '{}';

答案 1 :(得分:93)

作为后续操作,如果您只想设置默认值,请确保您可以使用ALTER .. SET语法。只是不要把所有其他的东西放在那里。如果您要将列的其余部分放入其中,请根据接受的答案使用MODIFY或CHANGE语法。

无论如何,用于设置列默认值的ALTER语法,(因为那是我来到这里时所寻找的):

ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT 'literal';

其中'字面'也可以是一个数字(例如...SET DEFAULT 0)。我还没试过...SET DEFAULT CURRENT_TIMESTAMP,但为什么不呢?

答案 2 :(得分:10)

如果要为已创建的列添加默认值, 这对我有用:

ALTER TABLE Persons
ALTER credit SET DEFAULT 0.0';

答案 3 :(得分:5)

对于DEFAULT CURRENT_TIMESTAMP:

ALTER TABLE tablename
 CHANGE COLUMN columnname1 columname1 DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
 CHANGE COLUMN columnname2 columname2 DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

请注意列名声明

删除DEFAULT CURRENT_TIMESTAMP:

ALTER TABLE tablename
 ALTER COLUMN columnname1 DROP DEFAULT,
 ALTER COLUMN columnname2 DROPT DEFAULT;

答案 4 :(得分:1)

如果上述内容对您不起作用(即:您正在使用新SQL或Azure ),请尝试以下操作:

1)删除现有列约束(如果有):

ALTER TABLE [table_name] DROP CONSTRAINT DF_my_constraint

2)创建一个新的:

ALTER TABLE [table_name] ADD CONSTRAINT DF_my_constraint  DEFAULT getdate() FOR column_name;

答案 5 :(得分:1)

尝试一下

ALTER TABLE `table_name` CHANGE `column_name` `column_name` data_type  NULL DEFAULT '';

像这样

ALTER TABLE `drivers_meta` CHANGE `driving_license` `driving_license` VARCHAR(30) NULL DEFAULT '';

答案 6 :(得分:0)

可接受的答案效果很好。

如果出现无效使用NULL值的错误,请对 NULL 值进行将该列中的所有空值更新为默认值,然后尝试进行更改。

UPDATE foobar_data SET col = '{}' WHERE col IS NULL;

ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}';