438

我需要将多个列添加到表中,但将列放置名为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?

4

11 回答 11

852

尝试这个

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

检查语法

于 2013-07-09T06:32:39.183 回答
83

如果您想在特定字段之后添加单列,那么下面的 MySQL 查询应该可以工作:

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

如果要添加多列,则需要每次对一列使用“添加”命令。这是 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, log,那么语法实际上是:statuslastname

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
    
于 2013-12-18T10:34:24.737 回答
11

这个是对的:

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`;
于 2015-05-13T10:10:14.903 回答
11

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

于 2015-12-15T22:29:18.240 回答
4
ALTER TABLE `users` ADD COLUMN
`COLUMN NAME` DATATYPE(SIZE) AFTER `EXISTING COLUMN NAME`;

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

于 2014-09-08T07:22:45.450 回答
2

或者:

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 语句。

于 2020-03-07T20:19:59.957 回答
1

一种可能性是不必费心重新排序表中的列,只需通过添加列来修改它。然后,创建一个视图,其中的列按您想要的顺序排列——假设顺序确实很重要。可以轻松更改视图以反映您想要的任何顺序。由于我无法想象顺序对于编程应用程序很重要,因此视图应该足以满足那些可能很重要的手动查询。

于 2013-07-09T06:30:16.413 回答
1

这对我来说很好:

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';
于 2017-05-16T08:36:20.760 回答
1

ALTER TABLE listingADD countINT(5), ADD logVARCHAR(200), ADD statusVARCHAR(20) AFTER stat

它会产生良好的效果。

于 2019-11-15T07:11:28.923 回答
1

我已经完成了这段代码,以防有人遇到我使用 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;
于 2021-02-06T18:30:29.680 回答
0

使用默认值 0 对我有用的解决方案如下

ALTER TABLE reservations ADD COLUMN isGuest BIT DEFAULT 0
于 2019-07-19T01:34:15.903 回答