摘要:在本教程中,您将学习如何使用 MySQL DROP COLUMN
语句从表中删除列。
MySQL DROP COLUMN
语句简介
在某些情况下,您想要从表中删除一列或多列。在这种情况下,您可以使用以下ALTER TABLE DROP COLUMN
语句:
ALTER TABLE table_name
DROP COLUMN column_name;
Code language: SQL (Structured Query Language) (sql)
在这个语法中:
- 首先,指定包含要在
ALTER TABLE
关键字后删除的列的表的名称。 - 其次,在
DROP COLUMN
子句中指定要删除的列的名称。
请注意, DROP COLUMN
子句中的关键字COLUMN
关键字是可选的,因此您可以使用更短的语句,如下所示:
ALTER TABLE table_name
DROP column_name;
Code language: SQL (Structured Query Language) (sql)
要使用单个ALTER TABLE
语句从表中删除多列,请使用以下语法:
ALTER TABLE table_name
DROP COLUMN column_name_1,
DROP COLUMN column_name_2,
...;
Code language: SQL (Structured Query Language) (sql)
从表中删除列之前,您应该记住一些重要的要点:
- 从表中删除列会使引用已删除列的所有数据库对象(例如存储过程、视图和触发器)无效。例如,您可能有一个引用列的存储过程。当您删除该列时,存储过程将变得无效。要修复它,您必须手动更改存储过程的代码。
- 依赖于删除的列的其他应用程序的代码也必须更改,这需要时间和精力。
- 从大型表中删除列可能会影响删除期间数据库的性能。
MySQL DROP COLUMN
示例
首先,创建一个名为posts
的表用于演示。
CREATE TABLE posts (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
excerpt VARCHAR(400),
content TEXT,
created_at DATETIME,
updated_at DATETIME
);
Code language: SQL (Structured Query Language) (sql)
接下来,使用ALTER TABLE DROP COLUMN
语句删除excerpt
列:
ALTER TABLE posts
DROP COLUMN excerpt;
Code language: SQL (Structured Query Language) (sql)
然后,使用DESCRIBE
语句查看表结构:
DESCRIBE posts;
Code language: SQL (Structured Query Language) (sql)

之后,使用ALTER TABLE DROP COLUMN
语句删除created_at
和updated_at
列:
ALTER TABLE posts
DROP COLUMN created_at,
DROP COLUMN updated_at;
Code language: SQL (Structured Query Language) (sql)
最后,使用DESCRIBE
语句验证删除:
DESCRIBE posts;
Code language: SQL (Structured Query Language) (sql)

MySQL 删除作为外键的列示例
如果删除作为外键的列,MySQL 将发出错误。考虑以下示例。
首先,创建一个名为categories
的表:
CREATE TABLE categories (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255)
);
Code language: SQL (Structured Query Language) (sql)
其次,将名为category_id
的列添加到posts
表中。
ALTER TABLE posts
ADD COLUMN category_id INT NOT NULL;
Code language: SQL (Structured Query Language) (sql)
第三,将category_id
列设置为引用categories
表的id
列的外键列。
ALTER TABLE posts
ADD CONSTRAINT fk_cat
FOREIGN KEY (category_id)
REFERENCES categories(id);
Code language: SQL (Structured Query Language) (sql)
第四,从posts
表中删除category_id
列。
ALTER TABLE posts
DROP COLUMN category_id;
Code language: SQL (Structured Query Language) (sql)
MySQL 发出错误消息:
Error Code: 1553. Cannot drop index 'fk_cat': needed in a foreign key constraint
Code language: JavaScript (javascript)
为了避免此错误,您必须在删除列之前删除外键约束。
在本教程中,我们向您展示了如何使用 MySQL DROP COLUMN
语句从表中删除一列或多列。
本教程有帮助吗?