8

ON DELETE CASCADE作成後にテーブルにを追加することはできますか?

私のスキーマは次のとおりです。

CREATE TABLE skills(name varchar, skill varchar, level int, foreign key(name) references runners(name), primary key(name, skill));

そして、外部キーが削除されたらカスケードしたいと思います。

4

1 に答える 1

11

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)を行うと、データベースがひどく爆発します。

于 2012-10-31T09:37:15.713 に答える