在MySQL中的特定列之后添加多个列


361

我需要将多个列添加到一个表中,但将这些列放置名为的列之后lastname

我已经试过了:

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

我收到此错误:

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


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


5
你在说什么方言 在我看来像mysql。但是ALTER TABLE方言之间的语法略有不同。
Damien_The_Unbeliever


1
我认为您在要添加的每一列上都需要一个AFTER关键字。这是否意味着您需要将所有3个都设为AFTER姓氏,还是需要为每个新列使用单独的ALTER TABLE语句,所以我不确定。
Zec

Answers:


728

尝试这个

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`;

检查语法


6
[ 作为附加信息 ]多发性ADDALTERDROP,和CHANGE允许在一个单一的条款ALTER TABLE声明,用逗号分隔。这是对标准SQL 的MySQL扩展,每个ALTER TABLE语句仅允许每个子句之一。
informatik01

@Ayyappan我们可以在sql server中做到吗?
Roshan

77

如果要在特定字段后添加一列,则以下MySQL查询应该起作用:

ALTER TABLE users
    ADD COLUMN count SMALLINT(6) NOT NULL
    AFTER lastname

如果要添加多个列,则每次需要为列使用“ 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

注意事项

在第二种方法中,最后一ADD COLUMN 实际上应该是要追加到表的第一列。

例如:如果你想添加countlogstatus之后的准确顺序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

3
第二个版本对我来说效果很好。我正在使用MySql 5.5.25。
诺曼

没有代码的最后位添加列的顺序countlogstatuscountstatuslog
Sarfaraaz

1
注意:如果您不添加'AFTER lastname'位,那么您在该更改表列表中放置的最后一列首先出现的顺序实际上并不适用。因此,当您执行ALTER TABLE表ADD COLUMN blah1,ADD COLUMN blah2时;(请注意,没有“ AFTER”子句),blah1列将首先添加,然后是blah2。
Hongyi Li

10

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


4
我给+1,但这应该是对已接受答案的评论
mjsarfatti

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`;


1

一种可能性是不用担心重新排序表中的列,而只需通过添加列来对其进行修改。然后,创建一个具有所需顺序的列的视图-假设顺序确实很重要。可以轻松更改视图以反映所需的任何顺序。由于我无法想象顺序对于编程应用程序将很重要,因此对于那些可能很重要的手动查询,该视图就足够了。


4
如果我可以加上两分钱,那么“放置”无论是表的列还是行,都不重要。电子表格使用位置查找内容,而数据库不使用。
Mike S.

1

ALTER TABLE listingADD countINT(5),ADD logVARCHAR(200),ADD statusVARCHAR(20)之后统计

它将给出良好的结果。


0

这对我来说很好:

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';

窃取评论以获得选票。不要做那个伴侣。
MBouwman '19


0

或者:

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`;

在简化AFTER语句的同时将它们按所需的顺序排列。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.