SQLite’s ALTER TABLE
command cannot do what you want.
However, it is possible to bypass the SQL interpreter and change the internal table definition directly.
SQLite stores table definitions as a textual copy of the CREATE TABLE
command in its sqlite_master
table; check out the result of this query:
SELECT sql FROM sqlite_master WHERE type="table" AND name="skills";
Add your cascade specification to that string, then enable write access to sqlite_master
with PRAGMA writable_schema=1;
and write your new table definition into it:
UPDATE sqlite_master SET sql="..." WHERE type="table" AND name="skills";
Then reopen the database.
WARNING: This works only for changes that do not change the on-disk format of the table. If you do make any change that changes the record format (such as adding/removing fields, or modifying the rowid
), your database will blow up horribly.