如何正确更改表默认值

时间:2018-09-08 14:44:46

标签: mysql

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

我希望更改它,以便在更新行时自动填充datetime值。我正在尝试编写一条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

我正在使用MySQL 5.7版

2 个答案:

答案 0 :(得分:1)

当您想更改列的名称时使用CHANGE COLUMN更改,并要求您在旧名称之后提供新名称。如果您不重命名该列,则必须提供两次名称。您的命令尝试将date_u列重命名为DATETIME,并且缺少NULL关键字之前的数据类型。

改为使用MODIFY COLUMN。相同,但是不允许重命名,因此不需要您两次输入列名。

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

我也不确定您最后使用'{}'的意图是什么,但是我也不认为这是有效的语法,因此我将其删除。

答案 1 :(得分:1)

您没有为新列命名。

更改此内容:

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;

请注意,由于您希望列名保持不变,所以列名键入两次,以前是更改列语法:

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;

Ps :我无法理解'{}'的意思,所以我删除了它,因为我认为这不是有效的语法。

希望我进一步推动了你。