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 .. SET 语法。只是不要把所有其他的东西放在那里。如果您要将列定义的其余部分放入,请根据接受的答案使用 MODIFY 或 CHANGE 语法。
无论如何,用于设置列默认值的 ALTER 语法,(因为这是我来到这里时所寻找的):
ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT 'literal';
其中'literal' 也可以是一个数字(例如...SET DEFAULT 0
)。我没有用 ...SET DEFAULT CURRENT_TIMESTAMP
尝试过,但为什么不呢?
ALTER TABLE table_name MODIFY COLUMN column_name TIMESTAMP NOT NULL DEFAULT current_timestamp;
DEFAULT
值的有效答案。
NOW()
或 current_timestamp()
@Malaise @Nereis
ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT NOW();
在 mysql 8.0.25 中出现语法错误!有谁知道为什么?
如果您想为已创建的列添加默认值,这对我有用:
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;
请注意双列名声明
删除 DEFAULT CURRENT_TIMESTAMP:
ALTER TABLE tablename
ALTER COLUMN columnname1 DROP DEFAULT,
ALTER COLUMN columnname2 DROPT DEFAULT;
如果上述方法对您不起作用(即:您正在使用新的 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;
接受的答案效果很好。
如果出现 Invalid use of NULL value 错误,则在 NULL 值上,将所有空值更新为该列中的默认值,然后尝试进行更改。
UPDATE foobar_data SET col = '{}' WHERE col IS NULL;
ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL 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 '';
使用这种方法: -
ALTER TABLE foobar_data CHANGE COLUMN col VARCHAR(255) NOT NULL SET DEFAULT '{}';
column
是可选的。您可以只使用ALTER TABLE foobar_data MODIFY col VARCHAR(255) NOT NULL DEFAULT '{}';
或ALTER TABLE foobar_data CHANGE col col VARCHAR(255) NOT NULL DEFAULT '{}';
,结果将是相同的。{}
。col
并排写正确吗? (像这个col col
)DEFAULT
值,请不要使用它。这将处理表的所有行(在大表上很长)。使用即时的ALTER TABLE <table_name> ALTER COLUMN <column_name> SET DEFAULT <value>
。