DB2-数据的级联删除
来源:互联网 发布:光纤端口一收一发 编辑:程序博客网 时间:2024/06/09 18:59
数据的级联删除操作
现在有三张表: GRANDFATHER, FATHER, SON(对,没错,就是爷爷, 父亲和儿子)
- GRANDFATHER : 李一代(id=101);
- FATHER : 李二代1(id=201)和李二代2(id=202);
- SON : 李三代1(id=301), 李三代2(id=302), 李三代3(id=303), 李三代4(id=304).
表之间的关系如下:
现在要求 : 删除表GRANDFATHER中李一代这条数据的时候, 同时将与其相关的表数据也同时删除(即:李二代和李三代等6条数据);
要达到这种目的, 比较常用的方法, 就是级联删除, 但是级联删除的前提是要有主外键关联, 所以就需要为FATHER表和SON表添加外键, 将其关联起来;
1.为FATHER表添加外键, 将其与表GRANDFATHER关联起来;
(将FATHER表的parent_id字段关联到GRANDFATHER表的id字段);
ALTER TABLE FATHER ADD CONSTRAINT FK_FATHER FOREIGN KEY (PARENT_ID) REFERENCES GRANDFATHER(ID) ON DELETE CASCADE;
2.为SON表添加外键, 将其与FATHER表关联起来;
(将SON表的parent_id字段关联到FATHER表的id字段);
ALTER TABLE SON ADD CONSTRAINT FK_SON FOREIGN KEY (PARENT_ID) REFERENCES FATHER(ID) ON DELETE CASCADE;
表数据:
GRANDFATHER表:
FATHER表:
SON表:
测试:
执行如下SQL命令, 将GRANDFATHER表中的李一代这条数据删除, 预期的效果应该是:李二代和李三代等6条数据也将同时会被删除;
DELETE FROM GRANDFATHER WHERE NAME='李一代';
测试结果正如预料;
安全隐患:
如果出现如下关系所示 , 当用同样的级联方法删除A1这条数据的时候, B1和C1也将会被同时删除; 如果此时, C1同时还被B2引用, 这种情况下,对B2和A2来说, C1被神不知鬼不觉的情况下删除了, 莫名奇妙地就消失了,出现这种问题, 应该比较头疼;
有同学问: 上图情况下, 删除C1会怎样?
无论在添加级联删除外键之前还是之后, 删除C1对其他数据都没有影响, 其他数据都将健在!
附录 : 建表语句和表数据
CREATE TABLE GRANDFATHER (ID VARCHAR(18) NOT NULL, NAME VARCHAR(20) NOT NULL, CONSTRAINT PK_YEYE PRIMARY KEY (ID));CREATE TABLE FATHER (ID VARCHAR(18) NOT NULL, NAME VARCHAR(20) NOT NULL, PARENT_ID VARCHAR(18), CONSTRAINT PK_YEYE PRIMARY KEY (ID));CREATE TABLE SON (ID VARCHAR(18) NOT NULL, NAME VARCHAR(20) NOT NULL, PARENT_ID VARCHAR(18), CONSTRAINT PK_YEYE PRIMARY KEY (ID));INSERT INTO GRANDFATHER (ID, NAME) VALUES ('101', '李一代');INSERT INTO FATHER (ID, NAME, PARENT_ID) VALUES ('201', '李二代1', '101');INSERT INTO FATHER (ID, NAME, PARENT_ID) VALUES ('202', '李二代2', '101');INSERT INTO SON (ID, NAME, PARENT_ID) VALUES ('301', '李三代1', '201');INSERT INTO SON (ID, NAME, PARENT_ID) VALUES ('302', '李三代2', '201');INSERT INTO SON (ID, NAME, PARENT_ID) VALUES ('303', '李三代3', '202');INSERT INTO SON (ID, NAME, PARENT_ID) VALUES ('304', '李三代4', '202');
by MikeSun @20170623 Fri
- DB2-数据的级联删除
- 级联表中数据的删除
- DB2删除重复数据的实现
- DB2 中删除数据
- 级联删除数据出现问题
- MYSQL级联条件删除数据
- Hibernate的级联删除
- Hibernate的级联删除
- 数据库的级联删除
- 级联删除的注意事项
- SQL 级联更新,级联删除的概念
- DB2删除大表数据
- 如何恢复DB2中误删除表的数据
- db2中删除数据的几种方法
- db2如何删除完全一样的重复数据
- 关于级联删除的问题
- 有关Hibernate的级联删除
- hibernate 级联删除的问题
- [WIN32]SystemParametersInfo函数原型
- Python+OpenCV感兴趣区域ROI提取
- 【TensorFlow-windows】(四) CNN(卷积神经网络)进行手写数字识别(mnist)
- 线程
- 录音器代码纯win32/C++
- DB2-数据的级联删除
- 愿我的世界总有你二分之一
- Android中将YUV数据Bitmap byte[]数据转换成Bitmap图片
- Mysql实现读写分离
- 设置static控件背景颜色、控件字体的背景颜色和控件字体的颜色
- C语言——数组与指针进阶(一)
- jsp数据交互
- 使用java发短信
- USB设备的VID与PID