我不知道为什么我的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版
答案 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 :我无法理解'{}'
的意思,所以我删除了它,因为我认为这不是有效的语法。
希望我进一步推动了你。