删除数据表

在MySQL中删除数据表时有两种情况:删除与其他表没有关联关系的数据表,以及删除有外键约束的主表。本节简单介绍两种情况下如何删除数据表。

8.4.1 删除没有关联关系的数据表

在MySQL中,当一张数据表没有与其他任何数据表形成关联关系时,可以将当前数据表直接删除。

1.语法格式

删除没有关联关系的数据表的语法格式如下:


DROP TABLE [IF EXISTS] 数据表1 [, 数据表2, …, 数据表n]
  

2.简单示例

首先,查看商品数据库goods中的所有数据表。


mysql> SHOW TABLES;
  +------------------+
  | Tables_in_goods  |
  +------------------+
  | t_goods          |
  | t_goods_category |
  | t_goods_snapshot |
  | t_goods_tmp      |
  +------------------+
  4 rows in set (0.01 sec)
  

接下来,删除数据表t_goods_snapshot。


mysql> DROP TABLE t_goods_snapshot;
  Query OK, 0 rows affected (0.01 sec)
  

再次查看商品数据库goods中的所有数据表。


mysql> SHOW TABLES;
  +------------------+
  | Tables_in_goods  |
  +------------------+
  | t_goods          |
  | t_goods_category |
  | t_goods_tmp      |
  +------------------+
  3 rows in set (0.00 sec)
  

数据表t_goods_snapshot已经被成功删除。

当数据库中不存在要删除的数据表时,使用“DROP TABLE 表名”的语法删除数据表时MySQL会报错。例如,再次删除商品数据库goods中的t_goods_snapshot数据表。


mysql> DROP TABLE t_goods_snapshot;
  ERROR 1051 (42S02): Unknown table 'goods.t_goods_snapshot'
  

由于商品数据库goods中已经不存在t_goods_snapshot数据表,所以MySQL抛出未知的数据表错误。此时可以使用“DROP TABLE IF EXISTS 表名”的语法使MySQL不再抛出错误信息。


mysql> DROP TABLE IF EXISTS t_goods_snapshot;
  Query OK, 0 rows affected, 0 warning (0.00 sec)
  

IF EXISTS的含义为:如果当前数据库中存在相应的数据表,则删除数据表;如果当前数据库中不存在相应的数据表,则忽略删除语句,不再执行删除数据表的操作。

8.4.2 删除有外键约束的主表

删除有外键约束的主表时,如果直接删除主表,MySQL会报错。此时,有两种方式删除有外键约束的主表,一种方式是先删除有外键约束的从表,再删除主表;另一种方式为先解除外键约束,再删除主表。

在大多数情况下,删除有外键约束的主表时需要保留从表,所以本节先简单介绍如何解除外键约束,然后再删除主表。另一种方式是先删除从表,再删除主表,这种方式比较简单,读者只需要按照顺序先删除从表,再删除主表即可。

在8.1.3节中,数据表t_goods_category与数据表t_goods具有外键约束,并且t_goods_category为主表,t_goods为从表。此时,直接删除主表t_goods_category,MySQL会抛出错误信息。


mysql> DROP TABLE t_goods_category;
  ERROR 3730 (HY000): Cannot drop table 't_goods_category' referenced by a foreign key constraint 
  'foreign_category' on table 't_goods'.
  

可以看到,直接删除主表t_goods_category时,MySQL会抛出“不能删除表t_goods_category,在t_goods中存在外键约束”。

接下来按照8.3.9节中的介绍,取消数据表t_goods_category与数据表t_goods的外键约束。

再次执行删除主表t_goods_category的SQL语句如下:


mysql> DROP TABLE t_goods_category;                          
  Query OK, 0 rows affected (0.00 sec)
  

SQL语句执行成功,再次查看商品数据库goods中的数据表。


mysql> SHOW TABLES;
  +-----------------+
  | Tables_in_goods |
  +-----------------+
  | t_goods         |
  | t_goods_tmp     |
  +-----------------+
  2 rows in set (0.00 sec)
  

数据表t_goods_category已经被成功删除。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值