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

Posted

技术标签:

【中文标题】在 MySQL 中的特定列之后添加多个列【英文标题】:Adding multiple columns AFTER a specific column in MySQL 【发布时间】:2013-07-06 15:38:19 【问题描述】:

我需要向一个表中添加多个列,但将这些列放置在名为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 服务器版本,以便使用正确的语法 在第 7 行靠近 ') AFTER lastname'

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

【问题讨论】:

你在说什么方言?对我来说看起来像mysql。但是ALTER TABLE 语法在方言之间略有不同。 MySQL Alter Table Add Field Before or After a field already present 的可能重复项 我认为您在添加的每一列上都需要一个 AFTER 关键字。这是否意味着您需要所有 3 个都是 AFTER lastname 或每个新列的单独 ALTER TABLE 语句,我不能肯定地说。 【参考方案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`;

查看syntax

【讨论】:

[作为附加信息] 单个ALTER TABLE 语句中允许多个ADDALTERDROPCHANGE 子句,分开用逗号。这是标准 SQL 的 MySQL 扩展,每个 ALTER TABLE 语句只允许每个子句中的一个。 @Ayyappan 我们可以在 sql server 中执行此操作吗? bigquery 中的等价物是什么?【参考方案2】:

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

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

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
    

【讨论】:

第二个版本对我来说效果很好。我正在使用 MySql 5.5.25。 最后一段代码是否按countlogstatuscountstatuslog的顺序添加列? 注意:如果您不添加 'AFTER lastname' 位,那么您放入该 alter table 列表中的最后一列首先出现的顺序实际上并不适用。所以当你做 ALTER TABLE table ADD COLUMN blah1, ADD COLUMN blah2; (注意没有 'AFTER' 子句),列 blah1 将首先附加,然后是 blah2。 bigquery 中的等价物是什么?【参考方案3】:

这个是对的:

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

【讨论】:

其他人都没有为我工作 - 不过这个人可以。【参考方案4】:

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

【讨论】:

我给了 +1 但这应该是对已接受答案的评论【参考方案5】:
ALTER TABLE `users` ADD COLUMN
`COLUMN NAME` DATATYPE(SIZE) AFTER `EXISTING COLUMN NAME`;

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

【讨论】:

【参考方案6】:

或者:

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 语句的同时将它们按您想要的顺序排列。

【讨论】:

【参考方案7】:

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

【讨论】:

如果我可以加上我的两分钱,“放置”无论是表格的列还是行,都应该无关紧要。电子表格使用位置来查找内容,而数据库则没有。【参考方案8】:

这对我来说很好用:

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

【讨论】:

窃取评论以获得投票。不要那样做。【参考方案9】:

ALTER TABLE listing ADD count INT(5), ADD log VARCHAR(200), ADD status VARCHAR(20) 统计后

效果会很好。

【讨论】:

【参考方案10】:

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

ALTER TABLE reservations ADD COLUMN isGuest BIT DEFAULT 0

【讨论】:

【参考方案11】:

我已经完成了这段代码,以防有人遇到我使用 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;

【讨论】:

以上是关于在 MySQL 中的特定列之后添加多个列的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL 根据特定列选择多个列

MySql 选择具有多个特定列的所有表

如何在mysql中特定列的单个单元格中插入多个整数值

在 MySQL Workbench EER 图中的多个列上创建唯一约束

将 Access 表中的多个列连接到一个特定行

在 MySQL 中取消透视多个列