数据表之间经常存在外键关联的情况,这时如果直接删除父表,会破坏数据表的完整性,也会删除失败。

删除父表有以下两种方法:

  • 先删除与它关联的子表,再删除父表;但是这样会同时删除两个表中的数据。
  • 将关联表的外键约束取消,再删除父表;适用于需要保留子表的数据,只删除父表的情况。

下面介绍了如何取消关联表的外键约束并删除主表,也就是上面所说的删除父表的第二种方法。

在数据库中创建两个关联表。创建表 tb_emp4 的 SQL 语句如下:

CREATE TABLE tb_emp4
(
id INT(11) PRIMARY KEY,
name VARCHAR(22),
location VARCHAR (50)
);

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

CREATE TABLE tb_emp5
(
id INT(11) PRIMARY KEY,
name VARCHAR(25),
deptId INT(11),
salary FLOAT,
CONSTRAINT fk_emp4_emp5 FOREIGN KEY (deptId) REFERENCES tb_emp4(id)
);

tb_emp5 表为子表,具有名称为 fk_emp4_emp5 的外键约束;tb_emp4 为父表,其主键 id 被子表 tb_ emp5 所关联。

删除被数据表 tb_emp5 关联的数据表 tb_emp4,SQL 语句如下:

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

由运行结果可以看出,当主表在存在外键约束时,不能被直接删除。

下面解除子表 tb_emp5 的外键约束,SQL语句和运行结果如下:

mysql> ALTER TABLE tb_emp5 DROP FOREIGN KEY fk_emp4_emp5;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

语句成功执行后,会取消表 tb_emp4 和表 tb_emp5 之间的关联关系。

解除关联关系后,可以使用 DROP TABLE 语句直接删除父表 tb_emp4,SQL 语句如下:

DROP TABLE tb_emp4;

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

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| tb_emp5        |
| temp           |
+----------------+

可以发现,数据库列表中已经不存在名称为 tb_emp4 的表,删除成功。

5、删除被其它表关联的主表相关推荐

  1. delete from删除几张表关联和mysql几种连接查询总结

    delete from删除几张表关联和mysql几种连接查询总结 一.delete from删除几张表关联 ① 在多表连接时删除数据(错误删除示例): delete from sys_role_men ...

  2. mysql 删除语句多表关联_MySQL多表关联数据同时删除sql语句

    MySQL多表关联数据同时删除sql语句 有需要的朋友可参考. DELETE删除多表数据,怎样才能同时删除多个关联表的数据呢?这里做了深入的解释: 代码如下 1 delete from t1 wher ...

  3. sql数据表改为自动递增显示与其他表关联_MySQL萌新第一季 第四话-数据表的基本操作...

    本话旨在完成以下内容: 在数据库中,数据表是数据库中最重要和基本的操作对象,是数据存储的基本单位.换句话说我们操作数据库其实重要的就是操作数据表.本章将详细介绍数据表的基本操作,主要内容包括:创建数据 ...

  4. 多表联查时的sql删除语句的写法,即级联删除,将相关联的数据级联删除

    mysql多表关联删除 DELETE删除多表数据,怎样才能同时删除多个关联表的数据呢?这里做了深入的解释: 1 delete from t1 where 条件2 delete t1 from t1 w ...

  5. 表的插入、更新、删除、合并操作_20_通过表关联删除多张表

    通过表关联删除多张表 需求描述 需求:删除dept表里deptno和temp相同的记录,但数据不可再恢复. 解决方法:这里通过DELETE FROM A,B FROM tableNAME A JOIN ...

  6. 表的插入、更新、删除、合并操作_19_通过表关联删除记录

    通过表关联删除记录 需求描述 需求:删除dept表里deptno和temp相同的记录,但数据不可再恢复. 解决方法:这里通过DELETE FROM tableNAME A JOIN tableName ...

  7. ef oracle 批量更新慢_详解Oracle中多表关联批量插入、批量更新与批量删除

    概述 今天主要介绍一下Oracle数据库中多表关联批量插入.多表关联批量更新和多表关联批量删除.下面用实验来理解下~ 一.创建必须的表和序列语句 --创建部门表 dept:CREATE TABLE d ...

  8. MySql delete多表关联删除的使用方法

    #假设条件 假设有三张表a,b,c,三张表之间有关联关系,在删除一张表中的一行数据的时候需要同时删除其他表中的对应的数据,或是删除表中的数据需要通过另外的表中的条件才能知道,这时候如何能有sql语句快 ...

  9. MySQL如何同时删除主外键关联的两张表中的数据

    1. 编写目的 介绍一种方法,解决如下问题:如何同时删除两张相关联的表的记录. 比如说表a的外键fk依赖于表a的id,现在我们需要删除id=5的两条数据. 2. 主要方法 为了简单,推荐更改表a的外键 ...

最新文章

  1. Objective-C中的复制忍者卡卡西---NSProxy
  2. 消息机制(GUI线程讲解)
  3. 【人工智能初级系列(一)】科学计算库 Numpy
  4. java args eclipse_不会在eclipse中运行含有args[]参数的Java代码,求指导
  5. cmakefile 基础篇
  6. 极域电子教室忘记密码或无法卸载怎么办
  7. git提交中target等目录忽略与取消忽略
  8. MetaSploit攻击实例讲解------终端下PostgreSQL数据库的使用(包括kali linux 2016.2(rolling) 和 BT5)...
  9. rdt协议的java实现_rdt3.0发送方程序(Java实现)
  10. Ubuntu16.04 启动项修复
  11. 微信小程序时间显示几分钟前、几小时前、几天前....
  12. 十年阿里云存储进化史:今天最好的表现就是明天最低的要求
  13. WebDAV之葫芦儿·派盘 + CloudBeats
  14. windows安装imgaug ERROR: Command errored out with exit status 1: ERROR: Command errored out with exit
  15. Win10安装程序报错2503和2502错误解决方案
  16. Java问题集锦--Missing artifact net.sf.json-lib:json-lib:jar:2.4
  17. APP推广实战技能—— iOS100字符关键词覆盖!
  18. 前端开发的发展方向都有哪些?职业方向定位?
  19. matlab计算涡度的函数_涡度的计算
  20. 让Apache Shiro保护你的应用

热门文章

  1. DayDayUp:《P2P行业最高端的玩法》源于网友网络收集
  2. EL之Boosting之GB(DTR):利用梯度提升法解决回归(对多变量的数据集+实数值评分预测)问题
  3. ML之SVM:基于SVM(sklearn+subplot)的鸢尾花iris数据集的前两个特征(线性不可分的两个样本),判定鸢尾花是哪一种类型
  4. Py之easygui:easygui的简介、安装(最正确安装)、使用方法之详细攻略
  5. 如何快速掌握Pandas
  6. pandas:dataframe删除某些不为non的行
  7. python+requests+re匹配抓取猫眼上映电影信息
  8. Python 34(进程重点)
  9. NOI Day1线上同步赛梦游记
  10. 多对多的属性对应表如何做按照类别的多属性匹配搜索