まずは
SQL
1create table parent(pid int primary key,pname varchar(20));
2create table child(cid int primary key,cname varchar(20),pid int,foreign key(pid) references parent(pid) on delete cascade on update cascade);
3insert into parent values(1,'p1'),(2,'p2'),(3,'p3'),(4,'p4');
4insert into child values(1,'c1-1',1),(2,'c1-2',1),(3,'c1-3',1),(4,'c2-1',2),(5,'c2-2',2),(6,'c3-1',3),(7,'c3-2',3);
その上で
SQL
1delete from parent where pid=2;//childの4,5が削除
2update parent set pid=5 where pid=3;//childの6,7のpidが5に変わる
ここまではOKですか?
ここで
SQL
1update child set pid=4 where cid=6;//cid=6のpid=5を4に変える
parentにpid=4が存在するのでOK
SQL
1update child set pid=6 where cid=7;//cid=7のpid=5を6に変える
parentに存在しないpidに変更しようとしても誓約にひっかかります
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/03/14 10:58