DDL语句--删除表


删除表是指删除数据库中已经存在的表。删除表时,会删除表中的所有数据。因此,我们在删除表的时候要特别小心。

MySQL中通过DROP TABLE语句来删除表。由于创建表时可能存在外键约束,一些表成为了与之关联的表的父类。要删除这些表,情况还有点复杂,因为不能直接删除。

OK,这篇博客我在这里详细的整理下删除没有被关联的普通表和被其他表关联的父类的方法。

  • 1,删除没有被关联的普通表
MySQL中,直接使用DROP TABLE语句可以删除没有被其他关联的普通表,其基本语法如下:
DROP TABLE 表名
其中,‘表名’参数为要删除的表的名称。

OK,现在我们来实际操作下数据库:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(5) COLLATE utf8_bin NOT NULL,
  `card_id` varchar(20) COLLATE utf8_bin DEFAULT NULL,
  `age` int(11) DEFAULT '25',
  PRIMARY KEY (`id`),
  UNIQUE KEY `age_UNIQUE` (`card_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
然后我要删除到这张表,
DROP TABLE user;


OK,没问题,成功的删除user表了。


  • 2,删除被其他表关联的父表
在上一篇博客中我已经整理了在创建表时设置表的外键。这样就使数据库中的某些表之间建立关联关系。一些表成为了父表,这些表被其他子表关联着。要删除这些父表,情况还不能像上面那么简单,不可以直接删除的

OK,同样的,现在我们离实际操作下数据库,建表语句如下:

CREATE TABLE linkinframe.`user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(5) COLLATE utf8_bin NOT NULL,
  `card_id` varchar(20) COLLATE utf8_bin DEFAULT NULL,
  `age` int(11) DEFAULT '25',
  PRIMARY KEY (`id`),
  UNIQUE KEY `age_UNIQUE` (`card_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE `address` (
  `id` int(11) NOT NULL,
  `user_id` int(11) DEFAULT NULL,
  `name` varchar(45) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `user_id_idx` (`user_id`),
  CONSTRAINT `user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
OK,现在我们删除主表user,
DROP TABLE linkinframe.user;
删除失败,数据库报错:
Cannot delete or update a parent row: a foreign key constraint fails。


那要怎么办呢?

1,最简单最直接的办法是,先删除子表address,然后在删除父表。但是这样子可能会影响到子表的其他数据

2,另一种办法就是先删除子表的外键约束,然后再删除父表。这种办法,不会影响到子表的其他数据,可以保证数据库的安全

实际操作中也是往往使用第2种方式,只删除从表的外键约束而不是把整个从表都删除掉。

OK,现在我们先去删除从表address的外键约束:

ALTER TABLE linkinframe.address DROP foreign key user_id;

我们先来查看下从表的表结构:


OK,外键删除成功,现在我们在删除主表user;
DROP TABLE linkinframe.user;

OK,结果显示user已经不存在了,主表删除成功。

  • 总结:

删除一个表时,表中所有的数据也会被删除。因此,在删除表的时候一定要慎重

最稳妥的做法就是先将表中所有的数据备份出来,然后在删除表,一般删除表后发现造成了损失,还可以通过备份的数据还原表,以便将损失降低到最小

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章