如何修改列和更改默认值?

当我试图改变一个列的数据类型并设置一个新的默认值时,我得到了以下错误:

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

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

412182 次浏览
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 '{}';

作为后续,如果你只是想设置一个默认值,你可以使用ALTER ..集语法。别把其他东西都放进去。如果要放入列定义的其余部分,请根据接受的答案使用MODIFY或CHANGE语法。

不管怎样,设置默认列的ALTER语法(因为这是我来这里时所寻找的):

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

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

如果上述方法对你不起作用(即:你正在使用新的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;

如果你想为已经创建的列添加一个默认值, 这适用于我:

ALTER TABLE Persons
ALTER credit SET DEFAULT 0.0;

默认的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;

请注意 columnname声明

删除默认CURRENT_TIMESTAMP:

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

试试这个

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 '';

Accepted Answer很好。

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

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


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

使用这种方法:-

ALTER TABLE foobar_data .

. COLUMN col VARCHAR(255) NOT NULL