세계!mysql 많은 많은 삭제 캐스케이드 나뭇잎 고아
대다수 관계에서 레코드를 계단식으로 삭제할 때 고아가 발생했습니다.
DROP TABLE IF EXISTS skTable;
DROP TABLE IF EXISTS studentTable;
DROP TABLE IF EXISTS kTable;
DROP TABLE IF EXISTS classTable;
create table if not exists classTable (id int primary key) ENGINE=INNODB;
insert into classTable values(1);
insert into classTable values(2);
create table if not exists studentTable (id int primary key, classID int, CONSTRAINT FOREIGN KEY (classID) REFERENCES classTable(id) ON DELETE CASCADE) ENGINE=INNODB;
insert into studentTable values(1, 1);
insert into studentTable values(2, 2);
create table if not exists kTable (id int primary key) ENGINE=INNODB;
insert into kTable values(1);
insert into kTable values(2);
insert into kTable values(3);
create table if not exists skTable (id int primary key, studentID int, CONSTRAINT FOREIGN KEY(studentID) REFERENCES studentTable(id) on delete cascade, kID int, CONSTRAINT FOREIGN KEY(kID) REFERENCES kTable(id) on delete cascade) ENGINE=INNODB;
insert into skTable values(1,1,1);
insert into skTable values(2,2,2);
insert into skTable values(3,2,3);
insert into skTable values(4,1,2);
DELETE FROM classTable WHERE id=2;
내 기대는 이러한 기록을 얻을 수 있습니다 : 이것은 (MySQL 용) 내 SQL 코드입니다
classTable, 1 개 기록 :
id=1
studentTable, 1 개 기록 :
id=1, classID=1
k 테이블, 2 레코드 :
id=1
id=2
skTable, 2 기록 :
id=1, studentID=1, kID=1
id=4, studentID=1, kID=2
문제는 마지막에 kTable가 고아 인 추가 기록
id=3
을 가지고 있다는 것입니다.
아이디어가 있으십니까? 감사합니다. . L
감사합니다. Phaneendra, 이제 문제가 더 잘 이해됩니다. 더 나은 설계 옵션이 있습니까? 아니면 트리거 또는 코드로 고아를 관리 할 수 있습니까? –
코드에서 더 나은 옵션을 관리 할 수 없습니다. –