MySQL 删除列

时间:2019-11-20 08:52:09  来源:igfitidea点击:

简介:在本教程中,您将学习如何使用MySQL DROP COLUMN语句从表中删除列。

MySQL DROP COLUMN语句简介

在某些情况下,您想要从表中删除一个或多个列。
在这种情况下,请使用以下ALTER TABLE DROP COLUMN语句:

ALTER TABLE table_name
DROP COLUMN column_name;

使用以下语法:

  • 首先,在ALTER TABLE关键字之后指定包含要删除的列的表的名称。

  • 其次,在DROP COLUMN子句中指定要删除的列的名称。

请注意,DROP COLUMN子句中的关键字COLUMN关键字是可选的,因此您可以如下使用较短的语句:

ALTER TABLE table_name
DROP column_name;

要使用单个ALTER TABLE语句从一个表中删除多个列,请使用以下语法:

ALTER TABLE table_name
DROP COLUMN column_name_1,
DROP COLUMN column_name_2,
...;

从表中删除列之前,应记住一些重要事项:

  • 从表中删除列会使所有数据库对象(例如存储过程,视图和引用删除的列的触发器)无效。
    例如对于您可能有一个存储过程引用一个列。
    当您删除该列时,存储过程将变为无效。
    要解决此问题,您必须手动更改存储过程的代码。

  • 还必须更改来自其他应用程序的依赖于被删除列的代码,这需要花费时间和精力。

  • 从大表删除列可能会影响删除期间数据库的性能。

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
);

接下来,使用ALTER TABLE DROP COLUMN语句删除摘录列:

ALTER TABLE posts
DROP COLUMN excerpt;

然后,使用DESCRIBE语句查看表结构:

DESCRIBE posts;

之后,使用ALTER TABLE DROP COLUMN语句删除created_at和updated_at列:

ALTER TABLE posts
DROP COLUMN created_at,
DROP COLUMN updated_at;

最后,使用DESCRIBE语句验证删除:

DESCRIBE posts;

MySQL删除了一个外键示例列

如果删除作为外键的列,MySQL将发出错误。
考虑以下示例。

首先,创建一个名为category的表:

CREATE TABLE categories (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255)
);

其次,在posts表中添加一个名为category_id的列。

ALTER TABLE posts 
ADD COLUMN category_id INT NOT NULL;

第三,使category_id列作为对该类别表的id列的引用的外键列。

ALTER TABLE posts 
ADD CONSTRAINT fk_cat 
FOREIGN KEY (category_id) 
REFERENCES categories(id);

第四,从posts表中删除category_id列。

ALTER TABLE posts
DROP COLUMN category_id;

MySQL发布了错误信息:

Error Code: 1553. Cannot drop index 'fk_cat': needed in a foreign key constraint

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

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