Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql alter table中多个更改列的语法错误?_Mysql_Sql - Fatal编程技术网

Mysql alter table中多个更改列的语法错误?

Mysql alter table中多个更改列的语法错误?,mysql,sql,Mysql,Sql,我正试图改变这样一张桌子: ALTER TABLE book ADD COLUMN `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER `id`, CHANGE COLUMN `id` bigint unsigned NOT NULL AUTO_INCREMENT, CHANGE COLUMN `author_id` bigint unsigned NOT

我正试图改变这样一张桌子:

ALTER TABLE book 
    ADD COLUMN `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER `id`,
    CHANGE COLUMN `id` bigint unsigned NOT NULL AUTO_INCREMENT,
    CHANGE COLUMN `author_id` bigint unsigned NOT NULL;
但它不断给出以下语法错误:

#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 'bigint unsigned NOT NULL AUTO_INCREMENT, CHANGE COLUMN `author_id` bigint un' at line 3
我不知道哪里出了问题。SQL对我来说似乎很好,每个表更改都可以单独成功执行:

ALTER TABLE book ADD COLUMN `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER `id`;
ALTER TABLE book CHANGE COLUMN `id` bigint unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE book CHANGE COLUMN `author_id` bigint unsigned NOT NULL;
我可以使用单独的版本,但是有相当多的大型表需要修改,所以如果使用组合查询会更好,因为组合查询应该更快


为什么组合SQL不能工作?

问题在于您的代码行下方,因为文档中的每种语法
CHANGE
需要一个新的列名,如
CHANGE[column]old\u colu name new\u colu name colu name column\u definition

CHANGE COLUMN `id` bigint unsigned NOT NULL AUTO_INCREMENT,
MODIFY [COLUMN] `id` bigint unsigned NOT NULL AUTO_INCREMENT
所以你可以把它改成

CHANGE COLUMN `id` `new_id` bigint unsigned NOT NULL AUTO_INCREMENT,

(或)考虑使用<代码>修改< /代码>,类似于<代码>修改[列] CyLNIX CyrnNy定义

CHANGE COLUMN `id` bigint unsigned NOT NULL AUTO_INCREMENT,
MODIFY [COLUMN] `id` bigint unsigned NOT NULL AUTO_INCREMENT

这是对标准SQL的MySQL扩展,每个ALTER TABLE语句只允许一个子句。例如,要在一条语句中删除多个列,请执行以下操作:“--这似乎是答案?单个alter table查询中只能有1种类型的列更改?@kavoir.com,是的,每个alter table语句只能有一个添加/更改/删除,不能组合。请正确检查语法,您将看到。@kavoir.com,请参阅答案中的编辑以获得更好的说明。这真是太奇怪了。我试过了,它成功了
ALTER TABLE sub_subject ADD
ts`timestamp NOT NULL DEFAULT CURRENT_timestamp ON UPDATE CURRENT_timestamp AFTER
id
,修改
id
bigint unsigned NOT NULL自动递增,更改
subject
subject idbigint unsigned NOT NULL`@kavoir.com,我一定是睡眼惺忪地回答了。。。如果有帮助,请参阅答案中的编辑。