When does Cascade Delete Commit in Sqlite? -


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