首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >alter table中多个change列的语法错误?

问alter table中多个change列的语法错误?
EN

Stack Overflow用户
提问于 2016-08-07 08:46:45
回答 1查看 788关注 0票数 2

我正在尝试修改一个表,如下所示:

代码语言:javascript
复制
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;

但是它一直给出这样的语法错误:

代码语言:javascript
复制
#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对我来说似乎没有问题,每个表修改都可以单独成功地执行:

代码语言:javascript
复制
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不起作用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-07 08:49:40

问题出在下面的代码行中,根据文档中的语法,CHANGE需要一个新的列名,如CHANGE [COLUMN] old_col_name new_col_name column_definition

代码语言:javascript
复制
CHANGE COLUMN `id` bigint unsigned NOT NULL AUTO_INCREMENT,

因此,您可以将其更改为

代码语言:javascript
复制
CHANGE COLUMN `id` `new_id` bigint unsigned NOT NULL AUTO_INCREMENT,

(或者)考虑像使用MODIFY [COLUMN] col_name column_definition一样使用MODIFY

代码语言:javascript
复制
MODIFY [COLUMN] `id` bigint unsigned NOT NULL AUTO_INCREMENT
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38809925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档