ON DELETE CASCADE作成後にテーブルにを追加することはできますか?
私のスキーマは次のとおりです。
CREATE TABLE skills(name varchar, skill varchar, level int, foreign key(name) references runners(name), primary key(name, skill));
そして、外部キーが削除されたらカスケードしたいと思います。
SQLiteのALTER TABLEコマンドはあなたが望むことをすることができません。
ただし、SQLインタープリターをバイパスして、内部テーブル定義を直接変更することは可能です。SQLiteは、テーブル定義をコマンドのテキストコピーとしてテーブルに格納します。このクエリの結果を確認してください。CREATE TABLEsqlite_master
SELECT sql FROM sqlite_master WHERE type='table' AND name='skills';
その文字列にカスケード仕様を追加し、sqlite_masterwithへの書き込みアクセスを有効にしPRAGMA writable_schema=1;て、新しいテーブル定義をその文字列に書き込みます。
UPDATE sqlite_master SET sql='...' WHERE type='table' AND name='skills';
次に、データベースを再度開きます。
警告:これは、テーブルのディスク上のフォーマットを変更しない変更に対してのみ機能します。レコード形式を変更する変更(フィールドの追加/削除、の変更などrowid)を行うと、データベースがひどく爆発します。