如何从 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;
这允许您在一个语句中对同一个表上的多个列进行DROP
、ADD
和ALTER
。来自MySQL reference manual:
您可以在单个
ALTER TABLE
语句中发出多个ADD
、ALTER
、DROP
和CHANGE
子句,以逗号分隔。这是标准 SQL 的 MySQL 扩展,每个ALTER TABLE
语句只允许每个子句中的一个。
【讨论】:
【参考方案2】:使用ALTER TABLE
和DROP COLUMN
从表中删除列,使用CHANGE
或MODIFY
更改列。
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 中的表中删除列的主要内容,如果未能解决你的问题,请参考以下文章