Mysql教程

6.4删除表

删除表是指删除数据库中己存在的表。删除表时,会删除表中的所有数据。因此,在删除表时要特别注意。MySQL中通过DROP TABLE语句来删除表。由于创建表时可能存 在外键约朿,一些表成为了与之关联的表的父表。要删除这些父表,情况比较复杂。本节 将详细讲解删除没有被关联的普通表和被其他表关联的父表的方法。

6.4.1删除没有被关联的普通表

MySQL中,直接使用DROP TABLE语句可以删除没有被其他关联的普通表。其基本 语法如下:

DROP TABLE 表名;

其中,“表名”参数为要删除的表的名称。

【示例】下面将删除example5表。SQL语句如下:

 DROP TABLE example5;

如果代码运行成功,将从数据库中删除example5表。在执行代码之前,先用DESC语 句查看是否存在example5表,以便与删除后进行对比。DESC语句执行后的显示结果如下:

mysql> DESC example5;
+---------+-----------+-------+-------+----------+-------+
|  Field  |    Type   |  NULL |  kEY  |  Default | Extra |
+---------+-----------+-------+-------+----------+-------+
|   id    |  int(11)  |   No  |  PRI  |          |       |
| stu_id  |  int(11)  |  YES  |  UNI  |  NULL    |       |
|  name   |varchar(20)|  NO   |       |          |       |
+---------+-----------+-------+-------+----------+-------+
3 rows in set(0.00 sec)

从查询结果可以看出,当前存在example5表。然后,执行DROP TABLE语句删除表。执行结果如下:

mysql> DROP TABLE example5 ;
Query OK, 0 rows affected (0.02 sec)

代码执行完毕,结果显示修改成功。为检验数据库中是否还存在example5表,使用 DESC语句重新查看example5表。查看结果如下:mysql> DESC example5;ERROR 1146 (42S02): Table 'example.example5' doesn't exist

査询结果显示,example5表已经不存在,操作成功。

技巧:删除一个表时,表中的所有数据也会被删除。因此,在删除表的时候一定要慎重。最稳妥的做法是先将表中所有的数据备份出来,然后再删除表。一旦删除表后发 现造成了损失,可以通过备份的数据还原表,以便将损失降低到最小。

6.4.2删除被其他表关联的父表

在6.1.3小节中讲解了创建表时设置表的外键。这样就使数据库中的某些表之间建立 了关联关系。一些表成为了父表,这些表被其子表关联着。要删除这些父表,情况不像上一节那么简单。

下面将要删除6.1节中创建的examole1表。SQL代码如下:

DROP TABLE example1 ;

代码执行后,结果显示如下:

mysql>DROP TABLE example1;
ERROR 1217(23000):Cannot delete or update a parent row:a foreign key constraint fails

结果显示删除失败,原因为有外键依赖于该表。因为6.1节中创建了 example4表依赖 于examplel表。example4表的外键stu_id依赖于examplel表的主键。examplel表是 example4表的父表。如果要删除example4表,必须先去掉这种依赖关系。最简单直接的 办法是,先删除子表example4,然后再删除父表狀example1。但这样可能会影响子表的其他数据;另一种办法是,先删除子表的外键约朿,然后再删除父表。这种办法,不会影响子表的其他数据,可以保证数据库的安全。因此,本小节将重点讲解这种办法。首先,根据6.3.8小节的方法,删除example4表的外键约束。先用SHOW CREATE TABLE语句查看example4表的外键別名,执行如下:

mysql> show create table example4 \G;**********************************1.row****************************Table:example4Create Table:CREATE TABLE 'example4'('id' int(11) NOT NULL,'name' varchar(20) NOTNULL,'stu_id' int(11) default Null,PRIMARY KEY('id'),KEY 'd_fk'('stu_id'),CONSTRAINT 'd_fk' FOREEIGN KEY('stu_id') REFERENCES 'example1'('stu_id'))ENGINE=InonoDB DEFAULT CHARSET=utf81 row in set(0.00 sec)

查询结果显示,example4表的外键别名为d_fk。然后执行ALTERTABLE语句,删除example4表的外键约束,详细知识见6.3.8小节。删除example4表的外键的SQL语句如下:

ALTER TABLE example4 DROP FOREIGN KEY d_fk;

执行结果如下:

mysql> show create table example4 \G;
**********************************1.row****************************
Table:example4
Create Table:CREATE TABLE 'example4'(
'id' int(11) NOT NULL,
'name' varchar(20) NOTNULL,
'stu_id' int(11) default Null,
PRIMARY KEY('id'),
KEY 'd_fk'('stu_id'),
CONSTRAINT 'd_fk' FOREEIGN KEY('stu_id') REFERENCES 'example1'('stu_id')
)ENGINE=InonoDB DEFAULT CHARSET=utf8
1 row in set(0.00 sec)

为查看example4表的外键约束是否已经被删除,使用SHOW CREATE TABLE语句查询,查询结果如下:

mysql>ALTER TABLE example4 DROP FOREIGN KEY d_fk;
Query OK 3 rows affected(0.01 sec)
Records :3 Duplicates:0 Warning:0

查询结果显示,example4表中己经不存在外键。现在,已经消除了example4表与examplel表的关联关系,即可直接使用DROP TABLE语句删除examplel表。SQL代码如下:

DROP TABLE example1;

执行结果如下:

mysql> DROP TABLE example1;

Query OK, 0 rows affected (0.00 sec)

结果显示,操作成功。可以使用语句查询DESC语句查询example表是否存在,结果如下:执行结果显示,examplel表已经不存在,说明examplel表已经删除成功。

mysql>DESC example1;
error 1146(42S02);Table 'example.example1' doesn't exist


关注微信获取最新动态