如何使用单个ALTER TABLE语句来删除多个列?
我想写一个单一的SQL命令,从一个表中删除多个列在一个ALTER TABLE
语句。
从MSDN的ALTER TABLE文档 …
DROP { [CONSTRAINT] constraint_name | COLUMN column_name }
指定从表中删除constraint_name或column_name。 如果兼容级别为65或更低,则不允许使用DROP COLUMN。 可以列出多个列和约束条件。
它说可以在语句中列出多列,但语法不会显示可选的逗号或任何可以提示语法的东西。
我应该如何编写我的SQL删除多个列在一个语句(如果可能)?
alter table TableName drop column Column1, Column2
语法是
DROP { [ CONSTRAINT ] constraint_name | COLUMN column } [ ,...n ]
对于MySQL
alter table TableName drop Column1, drop Column2
所以总结一下
Oracle :
ALTER TABLE table_name DROP (column_name1, column_name2);
MS SQL :
ALTER TABLE table_name DROP COLUMN column_name1, column_name2
MySql :
ALTER TABLE table_name DROP column_name1, DROP column_name2;
Postgre SQL
ALTER TABLE table_name DROP COLUMN column_name1, DROP COLUMN column_name2;
create table test (a int, b int , c int, d int); alter table test drop column b, d;
请注意,DROP COLUMN不会实际删除数据,而对于固定长度的types(int,numeric,float,datetime,uniqueidentifier等),即使在删除列后添加的logging也会消耗空间。 摆脱浪费的空间做ALTER TABLE ... REBUILD
。
这可能比较晚,但是分享给访问这个问题的新用户。 删除多列实际的语法是
alter table tablename drop column col1, drop column col2 , drop column col3 ....
所以对于每一列你需要在Mysql 5.0.45中指定“drop column”。
Microsoft为删除ALTER语句的列部分指定的语法是这样的
DROP { [ CONSTRAINT ] { constraint_name [ WITH ( <drop_clustered_constraint_option> [ ,...n ] ) ] } [ ,...n ] | COLUMN { column_name } [ ,...n ] } [ ,...n ]
请注意,[,… n]出现在列名称后面和整个drop子句的末尾。 这意味着有两种方法可以删除多个列。 你可以这样做:
ALTER TABLE TableName DROP COLUMN Column1, Column2, Column3
或这个
ALTER TABLE TableName DROP COLUMN Column1, COLUMN Column2, COLUMN Column3
如果要将列的删除与删除约束组合起来,则此第二种语法非常有用:
ALTER TBALE TableName DROP CONSTRAINT DF_TableName_Column1, COLUMN Column1;
删除列时SQL Sever不会回收被删除的列占用的空间。 对于内联存储在行中的数据types(例如int),甚至可能占用alter语句后添加的新行的空间。 为了解决这个问题,你需要在表上创build一个聚集索引,或者重build聚集索引(如果已经有的话)。 修改表后,可以使用REBUILD命令重build索引。 但是要注意的是,在非常大的桌面上这可能会很慢。 例如:
ALTER TABLE Test REBUILD;
如果只是单列删除下面的语法工作
ALTER TABLE tablename DROP COLUMN column1;
对于删除多列,使用DROP COLUMN
不起作用,下面的语法工作
ALTER TABLE tablename DROP (column1, column2, column3......);
对于MySQL(版本5.6),您不能使用一个drop
-statement来执行多个列删除,而是使用多个drop
-statement:
mysql> alter table test2 drop column (c1,c2,c3); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(c1,c2,c3)' at line 1 mysql> alter table test2 drop column c1,c2,c3; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'c2,c3' at line 1 mysql> alter table test2 drop column c1, drop column c2, drop c3; Query OK, 0 rows affected (0.64 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql>
顺便说一下, drop <col_name>
的缩写drop column <col_name>
缩写比例可以从上面的drop c3
看到。
alter table tablename drop (column1, column2, column3......);
通用:
ALTER TABLE table_name DROP COLUMN column1,column2,column3;
例如:
ALTER TABLE Student DROP COLUMN Name, Number, City;
这个查询会改变多列testing它。
create table test(a int,B int,C int); alter table test drop(a,B);
ALTER table table_name Drop column column1, Drop column column2,Drop column column3;
为MySQL DB。
或者你可以添加一些列而改变同一行:
ALTER table table_name Drop column column1, ADD column column2 AFTER column7;
尝试以下查询:
alter table table_name add field_name data_type
要么
alter table table_name drop column field_name
要么
alter table table_name drop field_name