489

鉴于使用创建的表:

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

如何删除该列IsDeleted

4

9 回答 9

767
ALTER TABLE tbl_Country DROP COLUMN IsDeleted;

这是一个工作示例。

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

ALTER TABLE tbl_Country
  DROP COLUMN IsDeleted,
  DROP COLUMN CountryName;

这允许您在一个语句DROPADDALTER同一张表上的多个列。来自MySQL 参考手册

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

于 2012-12-20T09:05:52.150 回答
99

使用ALTER TABLEwithDROP 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;
于 2012-12-20T09:08:28.177 回答
38

要删除单个列:

ALTER TABLE `table1` DROP `column1`;

要删除多个列:

ALTER TABLE `table1`
DROP `column1`,
DROP `column2`,
DROP `column3`;
于 2012-12-20T09:06:06.850 回答
17

您可以使用

alter table <tblname> drop column <colname>
于 2012-12-20T09:07:29.860 回答
14
ALTER TABLE `tablename` DROP `columnname`;

或者,

ALTER TABLE `tablename` DROP COLUMN `columnname`;
于 2012-12-20T09:06:51.577 回答
13

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

ALTER TABLE tbl_Country DROP COLUMN IsDeleted, ALGORITHM=INPLACE, LOCK=NONE;
于 2018-06-08T14:37:00.627 回答
10

使用ALTER

ALTER TABLE `tbl_Country` DROP COLUMN `column_name`;
于 2012-12-20T09:06:38.823 回答
8
ALTER TABLE tbl_Country DROP columnName;
于 2012-12-20T09:06:23.123 回答
3

值得一提的是 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<>小提琴演示

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

于 2021-01-24T22:43:01.957 回答