如何从MySQL表中删除列

给定使用以下方法创建的表:

CREATE TABLE tbl_Country
(
CountryId INT NOT NULL AUTO_INCREMENT,
IsDeleted bit,
PRIMARY KEY (CountryId)
)

如何删除列IsDeleted?

789164 次浏览
ALTER TABLE tbl_Country DROP COLUMN IsDeleted;

这是一个工作的例子。

注意,COLUMN关键字是可选的,因为MySQL只接受DROP IsDeleted。此外,要删除多个列,必须用逗号分隔它们,并为每一列包含DROP

ALTER TABLE tbl_Country
DROP COLUMN IsDeleted,
DROP COLUMN CountryName;

这允许你在一条语句中在同一个表上DROPADDALTER多个列。从MySQL参考手册:

你可以在一个ALTER TABLE语句中发出多个ADDALTERDROPCHANGE子句,用逗号分隔。这是一个标准SQL的MySQL扩展,每个ALTER TABLE语句只允许每个子句中的一个。

删除单个列:

ALTER TABLE `table1` DROP `column1`;

删除多个列。

ALTER TABLE `table1`
DROP `column1`,
DROP `column2`,
DROP `column3`;
ALTER TABLE tbl_Country DROP columnName;

使用ALTER:

ALTER TABLE `tbl_Country` DROP COLUMN `column_name`;
ALTER TABLE `tablename` DROP `columnname`;

或者,

ALTER TABLE `tablename` DROP COLUMN `columnname`;

你可以使用

alter table <tblname> drop column <colname>

使用ALTER TABLEDROP COLUMN从表中删除列,使用CHANGEMODIFY更改列。

ALTER TABLE tbl_Country DROP COLUMN IsDeleted;
ALTER TABLE tbl_Country MODIFY IsDeleted tinyint(1) NOT NULL;
ALTER TABLE tbl_Country CHANGE IsDeleted IsDeleted tinyint(1) NOT NULL;

如果你运行的是MySQL 5.6以后的版本,你可以让这个操作在线,允许其他会话在执行这个操作时读写你的表:

ALTER TABLE tbl_Country DROP COLUMN IsDeleted, ALGORITHM=INPLACE, LOCK=NONE;

值得一提的是,MySQL 8.0.23及以上版本支持看不见的列

CREATE TABLE tbl_Country(
CountryId INT NOT NULL AUTO_INCREMENT,
IsDeleted bit,
PRIMARY KEY (CountryId)
);


INSERT INTO tbl_Country VALUES (1, 1), (2,0);


ALTER TABLE tbl_Country ALTER COLUMN IsDeleted SET INVISIBLE;


SELECT * FROM tbl_Country;
CountryId
1
2


ALTER TABLE tbl_Country DROP COLUMN IsDeleted;

db<>小提琴demo

在需要“隐藏”的情况下,它可能是有用的。在安全删除列之前(如重做相应的应用程序/报告等)暂时删除列。