数据的级联删除操作
现在有三张表: 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数据库中实现数据级联删除的操作步骤和注意事项。通过创建外键关联GRANDFATHER、FATHER和SON三张表,实现删除GRANDFATHER表中的记录时,同时删除相关联的FATHER和SON表记录。文章通过实例演示了级联删除的过程,并讨论了可能存在的安全隐患及其影响。
1105

被折叠的 条评论
为什么被折叠?



