ddl - Add ON DELETE CASCADE behavior to an sqlite3 table after it has been created -


is possible add on delete cascade table after has been created?

my schema follows:

create table skills(name varchar, skill varchar, level int, foreign key(name) references runners(name), primary key(name, skill));

and cascade if foreign key deleted.

sqlite's alter table command cannot want.

however, possible bypass sql interpreter , change internal table definition directly. sqlite stores table definitions textual copy of create table command in sqlite_master table; check out result of query:

select sql sqlite_master type='table' , name='skills'; 

add cascade specification string, enable write access sqlite_master pragma writable_schema=1; , write new table definition it:

update sqlite_master set sql='...' type='table' , name='skills'; 

then reopen database.

warning: works changes not change on-disk format of table. if make change changes record format (such adding/removing fields, or modifying rowid), database blow horribly.


Comments