alter table在column1之后添加MULTIPLE列

Koa*_*ala 332 mysql ddl

我需要向表中添加多个列,但在列调用后将列定位lastname.

我试过这个:

ALTER TABLE `users` ADD COLUMN
(
    `count` smallint(6) NOT NULL,
    `log` varchar(12) NOT NULL,
    `status` int(10) unsigned NOT NULL
) 
AFTER `lastname`;
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

您的SQL语法有错误; 检查与您的MySQL服务器版本对应的手册,以便lastname在第7行的')AFTER ' 附近使用正确的语法

如何在这样的查询中使用AFTER?

Ayy*_*kar 674

试试这个

ALTER TABLE users
ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`,
ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `count`,
ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `log`;
Run Code Online (Sandbox Code Playgroud)

检查语法

  • [_作为附加信息_]在单个“ ALTER TABLE”语句中允许多个“ ADD”,“ ALTER”,“ DROP”和“ CHANGE”子句,并用逗号分隔。这是标准SQL的“ MySQL扩展”,每个ALTER TABLE语句仅允许每个子句之一。 (5认同)

小智 73

如果要在特定字段后添加单列,则mysql查询为:

ALTER TABLE users
    ADD COLUMN count SMALLINT(6) NOT NULL
    AFTER lastname
Run Code Online (Sandbox Code Playgroud)

如果要添加多个列,则每次都需要对列使用"ADD"命令.mysql查询如下:

ALTER TABLE users
    ADD COLUMN count SMALLINT(6) NOT NULL,
    ADD COLUMN log VARCHAR(12) NOT NULL,
    ADD COLUMN status INT(10) UNSIGNED NOT NULL
    AFTER lastname
Run Code Online (Sandbox Code Playgroud)

注意:在第二种方法中,最后一ADD COLUMN 实际上应该是要附加到表的第一列.

例如:如果你想添加count,log,status之后按顺序lastname,那么语法实际上是:

ALTER TABLE users
    ADD COLUMN log VARCHAR(12) NOT NULL AFTER lastname,
    ADD COLUMN status INT(10) UNSIGNED NOT NULL AFTER lastname,
    ADD COLUMN count SMALLINT(6) NOT NULL AFTER lastname
Run Code Online (Sandbox Code Playgroud)

  • 有多列的第二个版本对我没用. (3认同)
  • 第二个版本对我来说非常好.我正在使用MySql 5.5.25. (3认同)

小智 10

您不能使用逗号来提及多个列名ADD COLUMN.ADD COLUMN每次定义新列时都需要提及.

  • 我给了+1,但这应该是对已接受答案的评论 (3认同)

Wes*_*Ace 10

或者:

ALTER TABLE users
ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `lastname`,
ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `lastname`,
ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`;
Run Code Online (Sandbox Code Playgroud)

将按照您想要的顺序放置它们,同时简化 AFTER 语句。


小智 9

这个是正确的:

ALTER TABLE `users`
    ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`,
    ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `count`,
    ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `log`;
Run Code Online (Sandbox Code Playgroud)