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

时间:2013-07-09 06:22:00

标签: 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`;

我收到此错误:

  

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


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

11 个答案:

答案 0 :(得分:624)

试试这个

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

检查syntax

答案 1 :(得分:70)

如果要在特定字段后添加单个列,则以下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 实际上应该是您想要附加到表格的第一列。

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

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

答案 2 :(得分: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`;

答案 3 :(得分:8)

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

答案 4 :(得分:2)

ALTER TABLE users ADD COLUMN COLUMN NAME之后的EXISTING COLUMN NAME数据集(大小);

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

  

在统计后,更改表listing添加count INT(5),添加log VARCHAR(200),添加status VARCHAR(20)

它将提供良好的结果。

答案 7 :(得分: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';

答案 8 :(得分:0)

以下适用于我的解决方案(默认值为0)

ALTER TABLE reservations ADD COLUMN isGuest BIT DEFAULT 0

答案 9 :(得分: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语句时,将它们按所需顺序排列。

答案 10 :(得分:0)

我已经完成了这段代码,以防有人遇到我使用 MySQl 代码快速添加大量字段的问题希望它有所帮助,如果你太忙,你也可以在任何在线 php 编译器上运行这段代码!

$fields = array(

        'col_one' ,
        'col_two' ,
        'col_three'

    );

    $startF = 'after_col';
    $table = 'table_name';

    $output = 'ALTER TABLE ' .$table.'<br>';
    for($i=0 ; $i<count($fields) ; $i++){
        if($i==0){
            $output.= 'ADD COLUMN '.$fields[$i].' VARCHAR(15) AFTER '.$startF.',' . '<br>';

        }else{
            $output.= 'ADD COLUMN '.$fields[$i].' VARCHAR(15) AFTER '.$fields[$i-1].',' . '<br>';

        }
    }

// 没有数组的额外字段

    $output.= 'ADD COLUMN col_four VARCHAR(255) AFTER any_col_u_want,  '. '<br>';
    $output.= 'ADD COLUMN col_five VARCHAR(255) AFTER col_four,  '. '<br>';
    $output.= 'ADD COLUMN col_six VARCHAR(255) AFTER col_five'. '<br>';



    echo $output;