首页 文章

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

提问于
浏览
143

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

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

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

6 回答

  • 3
    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

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

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

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

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

  • 83

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

    ALTER TABLE Persons
    ALTER credit SET DEFAULT 0.0';
    
  • 222

    对于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;
    

    请注意 double columnname声明

    删除DEFAULT CURRENT_TIMESTAMP:

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

    如果以上情况对您不起作用(即:您正在使用 new SQL or 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;
    
  • 0

    试试这个

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

相关问题