本文对mysql也成立。把创建表的数据类型从oracle支持的换成mysql支持的就行了,即:

number换成int, varchar2换成varchar。

创建外键后,表的结构为:

CREATE TABLE `emp_test` (
  `empno` int NOT NULL,
  `fname` varchar(20) COLLATE utf8_bin DEFAULT NULL,
  `lname` varchar(20) COLLATE utf8_bin DEFAULT NULL,
  `dept` int DEFAULT NULL,
  PRIMARY KEY (`empno`),
  KEY `fk_emp_dept_test` (`dept`),
  CONSTRAINT `fk_emp_dept_test` FOREIGN KEY (`dept`) REFERENCES `dept_test` (`deptno`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

删除外键后,表的结构为:

CREATE TABLE `emp_test` (
  `empno` int NOT NULL,
  `fname` varchar(20) COLLATE utf8_bin DEFAULT NULL,
  `lname` varchar(20) COLLATE utf8_bin DEFAULT NULL,
  `dept` int DEFAULT NULL,
  PRIMARY KEY (`empno`),
  KEY `fk_emp_dept_test` (`dept`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

以下为转载的原文内容。

原始链接:主外键关联删除(on delete set null和on delete cascade)主外键关联删除(on delete set null和on delete cascade)_bisal的专栏-CSDN博客主外键关联,当删除的是父表数据,参照这些要删除的数据,Oracle有三种处理方式:1、禁止删除,也是Oracle默认方法。2、将参照要删除数据的子表对应数据置空。3、将参照要删除数据的子表对应数据删除。对于1,比较容易理解,不解释。对于2,需要使用on delete set null建立外键约束。实验:create table dept_test(dhttps://blog.csdn.net/bisal/article/details/20898055

主外键关联删除(on delete set null和on delete cascade)

主外键关联,当删除的是父表数据,参照这些要删除的数据,Oracle有三种处理方式:

1、禁止删除,也是Oracle默认方法。

2、将参照要删除数据的子表对应数据置空。

3、将参照要删除数据的子表对应数据删除。

对于1,比较容易理解,不解释。

对于2,需要使用on delete set null建立外键约束。实验:

create table dept_test
(deptno number(10) not null,
 deptname varchar2(30) not null,
 constraint pk_dept_test primary key(deptno));

create table emp_test
(empno number(10) not null,
 fname varchar2(20) ,
 lname varchar2(20) ,
 dept number(10) ,
 constraint pk_emp_test primary key(empno));

alter table emp_test
add constraint fk_emp_dept_test foreign key(dept) references dept_test(deptno) on delete set null;

insert into dept_test values(1,'销售部');
insert into dept_test values(2,'财务部');
insert into emp_test values (2,'Mary',' Song',1);
insert into emp_test values (3,'Linda','Liu',2);
insert into emp_test values (4,'Linlin','Zhang',1);

delete from dept_test where deptno = 1;
1 row deleted.

SQL> select * from emp_test;
     EMPNO FNAME          LNAME                  DEPT
---------- -------------------- -------------------- ----------
     2 Mary           Song
     3 Linda          Liu                     2
     4 Linlin          Zhang

SQL> select * from dept_test;
    DEPTNO DEPTNAME
---------- ------------------------------
     2 财务部
可以看到emp_test中参照dept_test中deptno=1的两条记录对应dept值已经置为空。

SQL> truncate table emp_test;
Table truncated.

SQL> truncate table dept_test;
truncate table dept_test
               *
ERROR at line 1:
ORA-02266: unique/primary keys in table referenced by enabled foreign keys
此时也是禁止清空dept_test表,drop相同。

如果想要删除父表,可以有两种方法:

1、先drop子表,再drop父表。

2、先删除约束alter table emp_test drop constraint fk_emp_dept_test;,再drop父表。

对于3,需要使用on delete cascade建立外键约束。实验:

alter table emp_test
add constraint fk_emp_dept_test foreign key(dept) references dept_test(deptno) on delete cascade;

delete from dept_test where deptno = 1;
1 row deleted.

SQL> select * from dept_test;
    DEPTNO DEPTNAME
---------- ------------------------------
     2 财务部

SQL> select * from emp_test;
     EMPNO FNAME          LNAME                  DEPT
---------- -------------------- -------------------- ----------
     3 Linda          Liu                     2
可以看到子表中参照父表的行也被删除了。

SQL> truncate table emp_test;
Table truncated.

SQL> truncate table dept_test;
truncate table dept_test
               *
ERROR at line 1:
ORA-02266: unique/primary keys in table referenced by enabled foreign keys
这种删除表的和上面相同。
————————————————
版权声明:本文为CSDN博主「bisal」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bisal/article/details/20898055

转载:主外键关联删除(on delete set null和on delete cascade)相关推荐

  1. Mysql中的外键分析(什么是外键,为什么要用外键,添加外键,主外键关联删除)

    有一个东西一直在我脑海中是个很烦的东西,但是这东西不搞清楚会阻碍自己的前进.自己做项目demo永远只能用一张表... 所以今天还是学习了下外键希望能够搞明白一些... 百度上搜索外键的作用" ...

  2. 主外键关联删除(on delete set null和on delete cascade)

    主外键关联,当删除的是父表数据,参照这些要删除的数据,Oracle有三种处理方式: 1.禁止删除,也是Oracle默认方法. 2.将参照要删除数据的子表对应数据置空. 3.将参照要删除数据的子表对应数 ...

  3. mysql 删除表数据_主外键关联表的数据删除策略

    说个题外话,我从来没想过会被拼多多这款软件所魔怔,他的这种社交营销的能力,实在是太强了,在怂恿之下,开始给儿子拼个这个, 各位有空帮砍下,https://w.url.cn/s/AzlPAB9,或者扫下 ...

  4. Mysql基础增删改查,主外键关联

    Mysql基础入门 章节导航 Mysql基础入门 创建 新增 删除 修改 查询 数据类型 主键 外键 数值计算 关联查询 1.登录mysql:mysql -uroot -p2.使用数据库: use 数 ...

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

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

  6. oracle级联 drop,请教:oralce自带主外键级联删除的原理?

    從trace file看,應該是oracle internal的trigger實現這個級聯delete的. SQL> alter session set events '10046 trace ...

  7. oracle+cascade=gt;true,mysql数据库主外键级联删除脚本RESTRICT -- CASCADE

    在项目中,我们一般在数据库设计的时候做主外键关联设计,要么就不做.但是这样不符合规范,呵呵. 建立主外键关系的时候,默认是不能级联删除的.而出现往往在删除主表的数据时报错, 需要先删除从表然后再删除主 ...

  8. 存在外键关联的主表truncate如何做

    主外键是数据库提供的一种两表之间强制关联的方法,也可以从应用层实现. 优点 缺点 数据库实现的主外键 由数据库层机制保证,无需应用额外实现 强关联,不易扩展变更 应用实现的主外键 易扩展变更 完全由应 ...

  9. 数据库中主外键概念详细介绍

    关于数据库的主外键设置问题 一.主外键概念 主键 ​ 1.主键 ​ 简单而言,能够唯一的表示表中的每一行数据,这样的列属性称为表的主键,使用表主键可以保证实体的完整性,可对表内数据进行修改.删除时使用 ...

最新文章

  1. 子域名绑定html,DEDE二级域名(多站点)绑定详解
  2. 使用antd报less的错误
  3. 10.31T2 点双联通分量+预处理前缀+二分答案
  4. 量子计算机功率,量子计算功耗知多少
  5. android获取工程中所有类名,android 获取手机的所有程序和widget的包名和启动类名...
  6. TextView设置文字竖着排放
  7. chown无效的用户mysql_mysql 从库设置read-only 对super权限的用户无效的问题
  8. php获取类的实例变量
  9. mysql时间减去1年_mysql时间增加一年
  10. 【CyberSecurityLearning 12】数据链路层 及 交换机工作原理与配置
  11. MySQL(零基础)详解之DQL
  12. quantopian寻找策略之mean_reversion
  13. 网络篇 网络设备的基本配置09
  14. 【刷题】验证回文字符串
  15. 在线字数计算机,在线字数统计工具
  16. STM32 CUBEIDE MacOS首次使用笔记
  17. 保姆级AS400 CL介绍与应用(硬核)
  18. 注册岩土工程师专业考试终于过了
  19. JS中常用的几种设计模式
  20. 【计算机组成原理】乘法运算

热门文章

  1. Number Game(数字游戏)
  2. js原生ajax写法
  3. 亚马逊、Lazada、shopee、wish、ebay、速卖通、阿里国际站、mercari、newegg测评,补单自养号攻略(环境方案详解)
  4. windows C++生成二维码图片
  5. FL Studio20.9序列号账户注册教程
  6. hihocoder图像算子(高斯消元)
  7. DFT的简单介绍(下)
  8. linux卸载nginx(更新)
  9. Sonya and Matrix Beauty
  10. 学习笔记_1 Matplotlib绘制散点图