this sql set of statements:
char *sql = "begin transaction; create table friends(id varchar unique); create table enemies(id2 varchar ,id3 integer,constraint id_econst foreign key(id2) references friends(id) on delete cascade); insert friends values('11'); insert friends values('2'); insert enemies values('11',3); insert enemies values('3',5); end transaction; pragma foreign_keys = on; delete friends id = '11';"; performs cascade delete on enemies table, whereas :
char *sql = "begin transaction; create table friends(id varchar unique); create table enemies(id2 varchar ,id3 integer,constraint id_econst foreign key(id2) references friends(id) on delete cascade); insert friends values('11'); insert friends values('2'); insert enemies values('11',3); insert enemies values('3',5); pragma foreign_keys = on; delete friends id = '11'; end transaction;"; does normal delete.
why ?
you enabling foreign key support within transaction. quote sqlite:
this pragma no-op within transaction
https://sqlite.org/pragma.html#pragma_foreign_keys
in second example, pragma has no effect, , foreign key constraint not enforced.
Comments
Post a Comment