MySQL DROP COLUMN

摘要:在本教程中,您将学习如何使用 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)
MySQL 删除列示例

之后,使用ALTER TABLE DROP COLUMN语句删除created_atupdated_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 constraintCode language: JavaScript (javascript)

为了避免此错误,您必须在删除列之前删除外键约束。

在本教程中,我们向您展示了如何使用 MySQL DROP COLUMN语句从表中删除一列或多列。

本教程有帮助吗?