Answers:
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 '{}';
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
紧挨着写两个s是否正确?(像这样col col
)
DEFAULT
值,则不要使用此选项。这将完全不处理表的所有行(在大型表上非常长)。改为使用ALTER TABLE <table_name> ALTER COLUMN <column_name> SET DEFAULT <value>
即时的。
作为后续,如果您只想设置默认值,请确保可以使用ALTER .. SET语法。只是不要把所有其他东西放在那里。如果要放入其余的列定义,请根据接受的答案使用MODIFY或CHANGE语法。
无论如何,用于设置列默认值的ALTER语法(因为这是我来这里时一直在寻找的内容):
ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT '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 Persons
ALTER credit SET DEFAULT 0.0';
对于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;
接受答案效果很好。
如果无效使用NULL值错误,请对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 '';