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

qaz*_*wsx 173 mysql sql

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

ALTER TABLE foobar_data ALTER COLUMN col VARCHAR(255) NOT NULL SET DEFAULT '{}';
Run Code Online (Sandbox Code Playgroud)

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

fan*_*nts 246

ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}';
Run Code Online (Sandbox Code Playgroud)

第二种可能性(感谢juergen_d):

ALTER TABLE foobar_data CHANGE COLUMN col col VARCHAR(255) NOT NULL DEFAULT '{}';
Run Code Online (Sandbox Code Playgroud)

  • `column`是可选的.您可以使用`ALTER TABLE foobar_data MODIFY col VARCHAR(255)NOT NULL DEFAULT'{}';`或`ALTER TABLE foobar_data CHANGE col col VARCHAR(255)NOT NULL DEFAULT'{}';`并且结果将相同. (9认同)
  • @Shafizadeh是的,确实如此.这提供了重命名列的可能性.第一个是原始名称,第二个是新名称. (4认同)
  • 如果您只需要更改“DEFAULT”值,请不要使用它。这将无偿处理表的所有行(在大表上很长)。改为使用`ALTER TABLE <table_name> ALTER COLUMN <column_name> SET DEFAULT <value>`,这是即时的。 (3认同)
  • 两个“col”并排书写正确吗?(就像这个`col col`) (2认同)

小智 104

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

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

ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT 'literal';
Run Code Online (Sandbox Code Playgroud)

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

  • +1对我来说是最好的答案,因为通过这种方式,我不需要指定列的类型和其他不会改变的东西! (5认同)
  • 如果引用的话,current_timestamp对我来说也不起作用.我不得不使用以下内容:`ALTER TABLE table_name MODIFY COLUMN column_name TIMESTAMP NOT NULL DEFAULT current_timestamp;` (3认同)
  • 这是仅更改“DEFAULT”值的有效答案。 (3认同)

小智 14

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

ALTER TABLE Persons
ALTER credit SET DEFAULT 0.0';
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的答案,因为您不需要复制现有的字段规范。 (4认同)