【发布时间】:2012-12-07 18:08:47
【问题描述】:
鉴于使用以下方法创建的表:
CREATE TABLE tbl_Country
(
CountryId INT NOT NULL AUTO_INCREMENT,
IsDeleted bit,
PRIMARY KEY (CountryId)
)
如何删除IsDeleted 列?
【问题讨论】:
标签: mysql ddl alter-table
鉴于使用以下方法创建的表:
CREATE TABLE tbl_Country
(
CountryId INT NOT NULL AUTO_INCREMENT,
IsDeleted bit,
PRIMARY KEY (CountryId)
)
如何删除IsDeleted 列?
【问题讨论】:
标签: mysql ddl alter-table
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语句只允许每个子句中的一个。
【讨论】:
使用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 `table1` DROP `column1`;
删除多列:
ALTER TABLE `table1`
DROP `column1`,
DROP `column2`,
DROP `column3`;
【讨论】:
reserved words的列,例如order
你可以使用
alter table <tblname> drop column <colname>
【讨论】:
ALTER TABLE `tablename` DROP `columnname`;
或者,
ALTER TABLE `tablename` DROP COLUMN `columnname`;
【讨论】:
如果您运行的是 MySQL 5.6 及更高版本,您可以在线执行此操作,允许其他会话在执行操作时读取和写入您的表:
ALTER TABLE tbl_Country DROP COLUMN IsDeleted, ALGORITHM=INPLACE, LOCK=NONE;
【讨论】:
使用ALTER:
ALTER TABLE `tbl_Country` DROP COLUMN `column_name`;
【讨论】:
ALTER TABLE tbl_Country DROP columnName;
【讨论】:
值得一提的是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;
在需要暂时“隐藏”一列才能安全删除它的情况下(例如重新处理相应的应用程序/报告等),它可能很有用。
【讨论】: