再帰結合を持つ単一テーブル データベースで参照整合性を維持するために、SQLite で外部キー サポートを使用しようとしています。
例えば
PRAGMA foreign_keys = ON;
create table tree (
objectId text unique not null,
parentObjectID text,
foreign key (parentObjectID) references tree(parentObjectID) on delete cascade
)
私が望んでいる動作は、親行が削除されると、その子とその子も削除されることです。
ただし、ルート行を削除しようとすると (データベース内の他のすべての行も削除されることが予想される場合)、次のエラーが発生します。
sqlite> delete from tree where objectid = '0';
Error: foreign key mismatch
私の期待は、SQLite の外部キー サポート (および削除動作) が提供できるものとは違っていますか?