关于ddl:在MySQL中的特定列之后添加多个列

Adding multiple columns AFTER a specific column in MySQL

我需要向表中添加多个列,但将列放在名为lastname的列之后。

我试过这个:

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

我收到此错误:

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 ') AFTER lastname' at line 7

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


试试这个

1
2
3
4
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`;

检查语法


如果要在特定字段后添加单个列,则以下MySQL查询应该有效:

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

如果要添加多个列,则每次都需要对列使用"ADD"命令。这是MySQL的查询:

1
2
3
4
5
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列实际上应该是要附加到表的第一列。

例如:如果你想在lastname之后按照确切的顺序添加countlogstatus,那么语法实际上是:

1
2
3
4
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


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


这个是正确的:

1
2
3
4
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
2
ALTER TABLE `users` ADD COLUMN
`COLUMN NAME` DATATYPE(SIZE) AFTER `EXISTING COLUMN NAME`;

你可以用这个来做,对我来说很好。


一种可能性是不打扰重新排序表中的列,只需通过添加列来修改它。然后,创建一个视图,其中包含所需顺序的列 - 假设顺序非常重要。可以轻松更改视图以反映您想要的任何排序。由于我无法想象订单对程序化应用程序很重要,因此该视图应该足以满足那些可能重要的手动查询。


默认值为0的解决方案如下

1
ALTER TABLE reservations ADD COLUMN isGuest BIT DEFAULT 0

这对我来说很好:

1
2
3
4
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';