代码之家  ›  专栏  ›  技术社区  ›  Valor_ user3379466

如何正确修改表的默认值

  •  1
  • Valor_ user3379466  · 技术社区  · 6 年前

    我不明白为什么alter table查询会抛出错误。当前,这是一个默认值为NULL的(DATETIME)列。

    我的愿望是修改它,以便在更新行时自动填充datetime值。我正试图写一个alter语句,但我不明白为什么我的语句会抛出错误。

    我的alter语句

    ALTER TABLE `mydb`.`orders` CHANGE COLUMN `date_u` DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP '{}';
    

    这就是我得到的错误

    16:28:34    ALTER TABLE `mydb`.`orders` CHANGE COLUMN `date_u` DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP '{}'  Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP '{}'' at line 1  0.00041 sec
    

    我使用的是MySQL5.7版本

    2 回复  |  直到 6 年前
        1
  •  2
  •   Barmar    6 年前

    这个 CHANGE COLUMN date_u 列到 DATETIME ,并且缺少 NULL 关键字。

    MODIFY COLUMN 相反。它是相同的,但不允许重命名,因此不需要您为列名指定两次。

    ALTER TABLE `mydb`.`orders` MODIFY COLUMN `date_u` DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP;
    

    我也不确定你的意图 '{}' 最后,但我也不认为它是有效的语法,所以我把它删除了。

        2
  •  1
  •   ThS    6 年前

    更改此项:

    ALTER TABLE `mydb`.`orders`
    CHANGE COLUMN `date_u` DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP '{}';
    

    ALTER TABLE `mydb`.`orders`
    CHANGE COLUMN `date_u` `date_u` DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP;
    

    请注意,列名的类型是twic,因为您希望列名保持不变,以前的change column语法如下:

    ALTER TABLE `table_name`
    CHANGE COLUMN `column_name` `column_new_name` (...);
    

    modify column 语法:

    ALTER TABLE `mydb`.`orders` MODIFY COLUMN `date_u` DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP;
    

    附言: 我不明白你的意思 '{}' 所以我删除了它,因为我认为它不是一个有效的语法。

    希望我把你推得更远。