如何从 MySQL 中的表中删除列

Posted

技术标签:

【中文标题】如何从 MySQL 中的表中删除列【英文标题】:How to delete a column from a table in MySQL 【发布时间】:2012-12-07 18:08:47 【问题描述】:

鉴于使用以下方法创建的表:

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

如何删除IsDeleted 列?

【问题讨论】:

【参考方案1】:
ALTER TABLE tbl_Country DROP COLUMN IsDeleted;

Here's 一个工作示例。

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

ALTER TABLE tbl_Country
  DROP COLUMN IsDeleted,
  DROP COLUMN CountryName;

这允许您在一个语句中对同一个表上的多个列进行DROPADDALTER。来自MySQL reference manual:

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

【讨论】:

【参考方案2】:

使用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;

【讨论】:

您可以使用更改或修改列来执行相同的操作。检查链接,它会给你使用 ALTER TABLE 更新列的想法【参考方案3】:

删除单个列:

ALTER TABLE `table1` DROP `column1`;

删除多列:

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

【讨论】:

它也适用于带有reserved words的列,例如order【参考方案4】:

你可以使用

alter table <tblname> drop column <colname>

【讨论】:

【参考方案5】:
ALTER TABLE `tablename` DROP `columnname`;

或者,

ALTER TABLE `tablename` DROP COLUMN `columnname`;

【讨论】:

【参考方案6】:

如果您运行的是 MySQL 5.6 及更高版本,您可以在线执行此操作,允许其他会话在执行操作时读取和写入您的表:

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

【讨论】:

【参考方案7】:

使用ALTER:

ALTER TABLE `tbl_Country` DROP COLUMN `column_name`;

【讨论】:

【参考方案8】:
ALTER TABLE tbl_Country DROP columnName;

【讨论】:

【参考方案9】:

值得一提的是MySQL 8.0.23及以上版本支持Invisible Columns

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<>fiddle demo

在需要暂时“隐藏”一列才能安全删除它的情况下(例如重新处理相应的应用程序/报告等),它可能很有用。

【讨论】:

以上是关于如何从 MySQL 中的表中删除列的主要内容,如果未能解决你的问题,请参考以下文章

如何从impala中的表中删除列

如何从mysql中的表中删除重复的行

如何在有外键关系的表中删除数据

如何使用特定表中的列作为我需要从中删除、插入或更新数据的表名

怎样删除mysql一个表中的全部数据

如何从 Backand 上的表中删除多行?