Mysql删除数据表实战

我不是女神ヾ 2021-07-25 01:18 663阅读 0赞

一 删除没有被关联的表

1 删除数据表tb_dept2,SQL语句如下:

  1. mysql> DROP TABLE IF EXISTS tb_dept2;
  2. Query OK, 0 rows affected (0.14 sec)

二 删除被其他表关联的表

1 在数据库中创建两个关联表,首先,创建表tb_dept2,SQL语句如下:

  1. CREATE TABLE tb_dept2
  2. (
  3. id INT(11) PRIMARY KEY,
  4. name VARCHAR(22),
  5. location VARCHAR(50)
  6. );

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

  1. CREATE TABLE tb_emp
  2. (
  3. id INT(11) PRIMARY KEY,
  4. name VARCHAR(25),
  5. deptId INT(11),
  6. salary FLOAT,
  7. CONSTRAINT fk_emp_dept FOREIGN KEY (deptId) REFERENCES tb_dept2(id)
  8. );

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

  1. mysql> SHOW CREATE TABLE tb_emp\G
  2. *************************** 1. row ***************************
  3. Table: tb_emp
  4. Create Table: CREATE TABLE `tb_emp` (
  5. `id` int(11) NOT NULL,
  6. `name` varchar(25) DEFAULT NULL,
  7. `deptId` int(11) DEFAULT NULL,
  8. `salary` float DEFAULT NULL,
  9. PRIMARY KEY (`id`),
  10. KEY `fk_emp_dept` (`deptId`),
  11. CONSTRAINT `fk_emp_dept` FOREIGN KEY (`deptId`) REFERENCES `tb_dept2` (`id`)
  12. ) ENGINE=InnoDB DEFAULT CHARSET=utf8
  13. 1 row in set (0.00 sec)

可以看到,以上执行结果创建了两个关联表tb_dept2和表tb_emp,其中tb_emp表为子表,具有名称为fk_emp_dept的外键约束,tb_dept2为父表,其主键id被子表tb_emp所关联。

删除被数据表tb_emp关联的数据表tb_dept2。

首先直接删除父表tb_dept2,输入删除语句如下:

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

可以看到,如前所述,在存在外键约束时,主表不能被直接删除。

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

  1. mysql> ALTER TABLE tb_emp DROP FOREIGN KEY fk_emp_dept;
  2. Query OK, 0 rows affected (0.06 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0

语句成功执行后,将取消表tb_emp和表tb_dept2之间的关联关系,此时,可以输入删除语句,将原来的父表tb_dept2删除,SQL语句如下:

  1. mysql> DROP TABLE tb_dept2;
  2. Query OK, 0 rows affected (0.06 sec)

最后通过SHOW TABLES;查看数据表列表,如下所示:

  1. mysql> show tables;
  2. +-------------------+
  3. | Tables_in_test_db |
  4. +-------------------+
  5. | tb_dept1 |
  6. | tb_deptment3 |
  7. | tb_emp |
  8. | tb_emp1 |
  9. | tb_emp2 |
  10. | tb_emp4 |
  11. | tb_emp5 |
  12. | tb_emp6 |
  13. | tb_emp7 |
  14. | tb_emp8 |
  15. | tb_emp9 |
  16. +-------------------+
  17. 11 rows in set (0.00 sec)

可以看到,数据表列表中已经不存在名称为tb_dept2的表

发表评论

表情:
评论列表 (有 0 条评论,663人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL 删除数据表

      MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失。   以下为删除MySQL数据表的通用语法:   DR