sqlite 在删除时未考虑级联[重复]

bcs8qyzn  于 2023-05-07  发布在  SQLite
关注(0)|答案(1)|浏览(171)

此问题已在此处有答案

Does SQLite3 not support foreign key constraints?(5个答案)
15天前关闭。
我正在使用sqlite-jdbc 3.36.0.3,它是一个“用于在Java中访问和创建SQLite数据库文件的库(它包括本机库)”。SQLite documentation shows SQLite支持ON DELETE CASCADE。执行以下命令不会触发级联删除,因此“Jon”已被删除,但“Scruffy”和“Poochy”未被删除。
sqlite-jdbc是否存在错误3.36.0.3?是否有其他人遇到过ON DELETE CASCADE未被尊重的问题?

CREATE TABLE Person(
    [Id] [INTEGER] PRIMARY KEY NOT NULL,
    [Name] [TEXT] NOT NULL
);

CREATE TABLE Pet(
    [Id] [INTEGER] PRIMARY KEY NOT NULL,
    [Name] [TEXT] NOT NULL,
    [PersonId] [INTEGER] NOT NULL,
    FOREIGN KEY (PersonId)
        REFERENCES Person (Id)
            ON DELETE CASCADE
);

INSERT INTO Person(Id, Name)
VALUES (1, "Jon");

INSERT INTO Pet(Id, Name, Person_id)
VALUES (1, "Scruffy", 1), (2, "Poochy", 1);

DELETE FROM Person WHERE Id=1;  -- "Jon" (Person) is removed, but not the pets (Scruffy/Poochy)
cwtwac6a

cwtwac6a1#

Person没有引用Pet,那么删除的Person如何知道存在哪些FK引用?
通常情况下,从PersonPet有一个FK,它级联删除和反向引用,即1:0-n -〉1 Person: 0-n Pets

相关问题