【问题标题】:Adding multiple columns AFTER a specific column in MySQL在 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 语法在方言之间略有不同。
  • 我认为您在添加的每一列上都需要一个 AFTER 关键字。这是否意味着您需要所有 3 个都是 AFTER lastname 或每个新列的单独 ALTER TABLE 语句,我不能肯定地说。

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

          【讨论】:

            猜你喜欢
            • 2018-05-01
            • 2011-12-17
            • 2020-03-08
            • 2013-03-07
            • 1970-01-01
            • 2021-08-15
            • 1970-01-01
            • 2016-09-09
            • 1970-01-01
            相关资源
            最近更新 更多