You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

sqlite-jdbc 3.36.0.3中ON DELETE CASCADE未生效问题咨询

SQLite ON DELETE CASCADE 不生效排查(针对sqlite-jdbc 3.36.0.3)

首先明确:sqlite-jdbc 3.36.0.3 不存在ON DELETE CASCADE相关的已知bug,社区也没有大规模反馈该版本级联删除失效的问题,你的问题根源是SQL语句的字段名错误。

问题具体原因

你创建Pet表时定义的外键字段是PersonId(无下划线),但插入Pet数据的SQL里写的是Person_id(带下划线):

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

SQLite默认处于宽松模式,遇到不存在的列名时不会报错,而是忽略该列的赋值操作。这导致Pet表的PersonId字段(NOT NULL约束)被默认赋值为0,而非你预期的1。此时Pet表的记录和Person表中Id=1的记录没有建立外键关联,自然不会触发ON DELETE CASCADE。

修正方案

将插入语句中的Person_id改为PersonId,修正后的SQL如下:

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

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

DELETE FROM Person WHERE Id=1;

执行修正后的语句后,删除Person表中Id=1的记录时,Pet表中关联的"Scruffy"和"Poochy"会被级联删除。

额外建议

可以开启SQLite的严格模式,避免这类字段名错误被忽略:

PRAGMA strict = ON;

开启后,插入不存在的列名会直接报错,能更早发现问题。

内容的提问来源于stack exchange,提问作者Jon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:22:48