MySQL学习之路4(3)

数据库的基本操作3

4.删除数据表
4.1删除没有被关联的表
DROP TABLE可以一次删除一个或多个没有被其他表关联的的数据表。语法格式如下:
DROP TABLE [IF EXISITS] 表1,表2,……,表n;
如果要删除的数据表不存在,则会出现一条错误信息:
ERROR 1051(42S02): Unknown table '表名‘
例:删除数据表tb_dept2,SQL语句如下:

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

语句执行结束后,使用SHOW TABLES命令查看当前数据库中所有的表即可看到数据表列表中已经不存在表tb_dept2,删除成功。
4.2删除被其他表关联的主表
数据表之间存在外键关联的情况下,如果直接删除父表,结果会显示失败,原因是直接删除,将破坏表的参照完整性,如果必须要删除,那么要要先删除与它关联的子表,再删除父表,但是这样要删除两个表中的数据。但有的情况下可能要保留子表,这时如果要单独删除父表,只需将关联的外键约束条件取消即可。
例:首先创建两个关联表,先创建tb_dept2,SQL语句如下:

mysql> CREATE TABLE tb_dept2(
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(22),
    -> location VARCHAR(50)
    -> );
Query OK, 0 rows affected (0.10 sec)

接下来创建tb_emp,SQL语句如下:

mysql> CREATE TABLE tb_emp(
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(22),
    -> salary FLOAT,
    -> deptId INT(11),
    -> CONSTRAINT fk_emp_dept FOREIGN KEY(deptId) REFERENCES tb_dept2(id)
    -> );
Query OK, 0 rows affected (0.78 sec)

使用SHOW CREATE TABLE命令查看tb_emp的外键约束,结果如下:

mysql> show create table tb_emp\G
*************************** 1. row ***************************
       Table: tb_emp
Create Table: CREATE TABLE `tb_emp` (
  `id` int(11) NOT NULL,
  `name` varchar(22) DEFAULT NULL,
  `salary` float DEFAULT NULL,
  `deptId` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_emp_dept` (`deptId`),
  CONSTRAINT `fk_emp_dept` FOREIGN KEY (`deptId`) REFERENCES `tb_dept2` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.14 sec)

删除数据表tb_emp关联的数据表tb_dept2:
首先删除父表tb_dept2,输入如下删除语句:

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

接下来,解除关联子表tb_emp的外键约束,SQL语句如下:

ALTER TABLE tb_emp DROP FOREIGN KEY fk_emp_dept;

语句执行成功之后,输入删除语句,将原来的父表tb_dept2删除,SQL语句如下:

mysql> DROP TABLE tb_dept2;
Query OK, 0 rows affected (0.29 sec)

最后SHOW TABLES;查看数据表列表,如下:

mysql> SHOW TABLES;
+-------------------+
| Tables_in_test_db |
+-------------------+
| tb_dept1          |
| tb_deptment3      |
| tb_emp            |
| tb_emp5           |
| tb_emp6           |
| tb_emp7           |
| tb_emp8           |
+-------------------+
7 rows in set (0.19 sec)

可以看到tb_dept2已经不存在了。

猜你喜欢

转载自blog.csdn.net/weixin_43037507/article/details/82959057