在 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
语句中允许多个ADD
、ALTER
、DROP
和CHANGE
子句,分开用逗号。这是标准 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
之后按确切顺序添加count
、log
、status
,那么语法实际上是:
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。 最后一段代码是否按count
、log
、status
或count
、status
、log
的顺序添加列?
注意:如果您不添加 '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
ADDcount
INT(5), ADDlog
VARCHAR(200), ADDstatus
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 中的特定列之后添加多个列的主要内容,如果未能解决你的问题,请参考以下文章