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 TABLE
sqlite_master
SELECT sql FROM sqlite_master WHERE type='table' AND name='skills';
その文字列にカスケード仕様を追加し、sqlite_master
withへの書き込みアクセスを有効にしPRAGMA writable_schema=1;
て、新しいテーブル定義をその文字列に書き込みます。
UPDATE sqlite_master SET sql='...' WHERE type='table' AND name='skills';
次に、データベースを再度開きます。
警告:これは、テーブルのディスク上のフォーマットを変更しない変更に対してのみ機能します。レコード形式を変更する変更(フィールドの追加/削除、の変更などrowid
)を行うと、データベースがひどく爆発します。