首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

DELETE级联上的SQLite外键不起作用

是指在SQLite数据库中,当设置了外键约束并且使用了级联删除(CASCADE)选项时,删除主表中的记录时,相关联的从表中的记录并没有被自动删除。

SQLite是一种轻量级的关系型数据库管理系统,它支持大部分的SQL标准,但在外键约束方面有一些限制。在SQLite中,默认情况下外键约束是被禁用的,需要手动开启。

要启用外键约束,可以使用PRAGMA语句设置foreign_keys参数为ON,例如:

代码语言:txt
复制
PRAGMA foreign_keys = ON;

然而,即使启用了外键约束,SQLite在级联删除方面的支持也有限。在SQLite中,级联删除只适用于通过触发器实现的级联删除操作,而不是直接在外键约束上设置级联删除选项。

要实现级联删除,可以创建一个触发器,在主表上的删除操作触发时,手动删除从表中相关的记录。以下是一个示例触发器的创建语句:

代码语言:txt
复制
CREATE TRIGGER delete_cascade
AFTER DELETE ON 主表名
FOR EACH ROW
BEGIN
    DELETE FROM 从表名 WHERE 外键列 = OLD.主表关联列;
END;

在这个触发器中,当主表中的记录被删除时,触发器会自动删除从表中与之相关的记录。

对于SQLite外键约束不支持级联删除的情况,可以考虑使用其他数据库管理系统,如MySQL、PostgreSQL等,它们对于外键约束和级联删除有更好的支持。

腾讯云提供了多种云数据库产品,如云数据库MySQL、云数据库PostgreSQL等,可以满足不同场景下的数据库需求。具体产品介绍和链接地址可以参考腾讯云官方网站的相关页面。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Django 2.2文档系列】Model on_delete参数用法

场景 我们用DjangoModel时,有时候需要关联。关联时,参数:on_delete几个配置选项到底是干嘛呢,你知道吗? 参数介绍 models.CASCADE 级联删除。...比如:用户有一个关联是用户健康记录表,当用户删除时,配置了这个参数健康记录表中跟这个用户有关数据也会被删除。...提醒:级联删除不会调用model级行为,但是会为所有已删除对象发送pre_delete和 post_delete信号,有用Django信号机制场景,要考虑这个级联删除带来影响。...当数据被删除时,被关联内容被设置为null。 models.SET_DEFAULT 将值设置为默认值。必须设置有默认值 。...models.SET()将SET()设置值作为值 ,如果传递了callable,则调用它结果。 DO_NOTHING不采取行动。

1.9K10

MySQL从删库到跑路_高级(一)——数据完整性

声明包括三个部分: A、哪个列或列组合是 B、指定参照表和列 C、参照动作[cascade(级联操作),restrict(拒绝操作),set null(设为空),no action,set...删除学生表学号是2学生 delete from student where sid=2 可以看到成绩表,该学生成绩已经级联删除 select * from score 6、验证级联动作No Aaction...级联动作设置为NO ACTION,如果子表中有匹配记录,则不允许对父表对应候选进行update/delete操作。...delete from student where sid=10delete from score where sid=10; 7、验证级联动作Set NULL 在父表update/delete记录时...,将子表匹配记录列设为null ,要注意子表列不能为not null。

1.9K20

MySQL使用详解--Java学习网

(1)只有InnoDB类型表才可以使用,mysql默认是MyISAM,这种类型不支持约束 (2)好处:可以使得两张表关联,保证数据一致性和实现一些级联操作; (3)作用: 保持数据一致性...使两张表形成关联,只能引用外表中值! (4)建立前提: 两个表必须是InnoDB表类型。 使用在外关系域必须为索引型(Index)。...使用在外关系域必须与数据类型相似 (5)创建步骤 指定主键关键字:foreign key(列名) 引用关键字:references (列名) (6)事件触发限制:on delete...(id) references outTable(id) on delete cascade on update cascade); 说明:把id列 设为 参照外表outTableid列 当值删除...on update cascade); 缺点:在对MySQL做优化时候类似查询缓存,索引缓存之类优化对InnoDB类型表是不起作用,还有在数据库整体架构中用得同步复制也是对InnoDB类型表不生效

89340

-基础面试题总结

(外码) :用来和其他表建立联系用,是另一表主键,是可以有重复,可以是空值。一个表可以有多个。 6. 为什么不推荐使用级联?...对于级联,阿里巴巴开发手册这样说到: 【强制】不得使用级联,一切概念必须在应用层解决。...级联更新适用于单机低并发,不适合分布式、高并发集群; 级联更新是强阻塞,存在数据库更新风暴风 险; 影响数据库插入速度 为什么不要用呢?...每次做DELETE 或者UPDATE都必须考虑约束,会导致开发时候很痛苦, 测试数据极为不方便; b....实际,我们知道外也是有很多好处,比如: 保证了数据库数据一致性和完整性; 级联操作方便,减轻了程序代码量; ......

64050

Oracle 级联删除外

所谓级联删除是指当主表中一条记录被删除,那么子表中所关联记录也相应自动删除。本教程将教大家如何在Oracle中使用级联删除外。...然后在products表创建了一个名为fk_supplier,该表根据supplier_id字段引用supplier表supplier_pk字段。...此外,我们也可以创建一个具有多个字段(带级联删除),如下例所示: CREATE TABLE supplier ( supplier_id numeric(10) not null, supplier_name...根据supplier_id和supplier_name删除supplier表中记录时,fk_foreign_comp级联删除会导致products表中所有对应记录也会被级联删除。...CASCADE; 在本例中,我们创建了一个名为fk_supplier(带级联删除),该基于supplier_id字段引用supplier表。

1.1K30

Django model 层之Models与Mysql数据库小结

如果使用SQLite,数据库文件将存放在电脑,这种情况下,NAME应该为绝对路径,包含数据库文件文件名。默认值如下,把数据库文件存放在项目根目录下。...可选值: CASCADE 级联删除。模拟sql约束 ON DELETE CASCADE。删除被参照表某条表记录,同时级联删除参照表中,同待删除记录存在外关联关系记录。...PROTECT 删除被参照表中某条表记录,如果参照表中,存在与该记录有关系记录,则不让删除。...SET_NULL 删除被参照表某条表记录,设置参照表中,同待删除记录存在外关联记录列值为null。当且仅当设置了null=True选项时可用。...SET_DEFAULT 删除被参照表某条表记录,设置参照表中,同待删除记录存在外关联记录列值为默认值。必须为列设置默认值。

2.2K20

MySQL实战七:你不知道与约束使用!

2.2 2.2.1 创建 (1)不带别名,数据库自动生成 首先创建department表: CREATE TABLE department ( dept_name varchar...,用来设置当主键表中被参考列数据发生变化时,表中响应字段变换规则。...学习 cascade 表示级联操作,就是说,如果主键表中被参考字段更新,表(子表)中也更新,主键表(父表)中记录被删除,表(子表)中改行也相应删除。...上述on delete cascade换成on update cascade,可以发现只能更新父表主键,同时父子表数据都会被更新,但是在子表做更新操作无效!...而on update只能删除子表数据,不能删除父表主键数据,只能更新父表主键,同时父子表数据都会被更新,但是在子表做更新操作无效。

4.3K20

django模型中有关系表删除相关设置

0904自我总结 django模型中有关系表删除相关设置 一.一对一 例如有Author、AuthorDetail两表 author = models.OneToOneField(to='Author...=models.DO_NOTHING, ) 1)关系字段放在Book表中(多一方):出版社删除书不动,书删除没有任何影响 2)出版社找书用 related_name...(books),书找出版社 字段(publish) 3)db_constraint断开表关联,on_delete规定逻辑关联删除动作,models.DO_NOTHING关联无动作 三.以外字段关联...db_constraint=False, on_delete=models.SET_DEFAULT, default=1, 注意:on_delete必须声明models.DO_NOTHING为删除级联关系...2)正向找 字段,反向找 字段related_name 3)db_constraint断开表关联,on_delete不存在(不设置,本质在第三张表中设置,且一定是级联)

3K20

SQL反模式学习笔记5 约束【不用钥匙入口】

; 3、数据库为建立索引会影响性能; 4、当前使用数据库不支持。...比如MySQLMyISAM存储引擎,或者比SQLite3.6.19早版本; 5、定义语法并不简单,还需要查阅。...会自动完成这些,并且会使用这父表索引尽可能高效完成) 3、有人说不要用影响数据库效率。...合理使用反模式: 如果数据库产品不支持约束功能,则不得不使用别的方法来保持引用完整性,比如使用监控脚本。 同样也存在一些极度灵活数据库设计,无法用来表示其对应关系。...(3)特性:级联更新,比如:On Update Cascade、On Delete Restrict等。

80530

Hibernate【inverse和cascade属性】知识要点

) session.get(Dept.class, 2); //删除部门2 session.delete(dept1); 当有控制权时候可以删除数据,先把设置为NULL..., 1); //删除部门1 session.delete(dept1); 直接抛出异常,说该部门拥有,不能删除数据!...这里写图片描述 如果我们在dept中设置了级联保存,那么Hibernate就会知道:保存dept数据时,发现dept了,也把dept对象保存在数据库之中 <set name="set...3); session.<em>delete</em>(dept1); 它会先把3<em>的</em><em>外</em><em>键</em>对应<em>的</em>记录删除,再删除部门<em>的</em>数据 ?...有控制权--->将<em>外</em><em>键</em><em>的</em>值设置为NULL,随后删除数据 没有控制权--->如果删除<em>的</em>记录有被<em>外</em><em>键</em>引用,会报错,违反主外<em>键</em>引用约束,如果删除<em>的</em>记录没有被引用,可以直接删除。

1.2K40

【愚公系列】2023年03月 Java教学课程 100-MySQL数据库(约束)

文章目录 一、约束 1.约束概念和分类 2.主键约束 3.主键自动增长约束 4.唯一约束 5.非空约束 6.约束 7.级联更新和级联删除(了解) ---- 一、约束 1.约束概念和分类...KEY ON UPDATE CASCADE 级联更新 在修改主表中记录时,自动更新与其关联从表中记录。...FOREIGN KEY ON DELETE CASCADE 级联删除 在关系型数据库中,当一个表某个记录被删除时,该表中所关联记录也会被自动删除过程。...(uid) REFERENCES USER(id); 7.级联更新和级联删除(了解) 什么是级联更新和级联删除 当我想把user用户表中某个用户删掉,我希望该用户所有的订单也随之被删除...CASCADE ON DELETE CASCADE; -- 删除外约束 ALTER TABLE orderlist DROP FOREIGN KEY ou_fk1; -- 添加约束,同时添加级联更新和级联删除

46100

【愚公系列】2022年01月 Mysql数据库-约束

文章目录 前言 1.约束概念 2.约束作用 一、数据库约束 1.约束分类 2.主键约束 3.主键自动增长约束 4.唯一约束 5.非空约束 6.约束 7.级联更新和级联删除 前言 1.约束概念...约束 FOREIGN KEY ON UPDATE CASCADE 级联更新 FOREIGN KEY ON DELETE CASCADE 级联删除 2.主键约束 主键约束特点 主键约束包含...(uid) REFERENCES USER(id); 7.级联更新和级联删除 什么是级联更新和级联删除 当我想把user用户表中某个用户删掉,我希望该用户所有的订单也随之被删除 当我想把...表名 ADD CONSTRAINT 键名 FOREIGN KEY (本表列名) REFERENCES 主表名(主键列名) ON DELETE CASCADE; -- 添加约束,同时添加级联更新和级联删除...ON DELETE CASCADE; -- 删除外约束 ALTER TABLE orderlist DROP FOREIGN KEY ou_fk1; -- 添加约束,同时添加级联更新和级联删除

51710

OEA 2.11 支持单机版数据库 - SQLite与SQLCE对比

其次,在 SQLite 中,约束可以被创建,但是却不会被检查。引用完整性都没法保证,查询速度再快有时也没用。...而且,象级联删除这类比较普遍需求也不支持,都需要编写触发器完成,虽然 AutoDb 可以自动编写,但是总感觉太费事了。...而 OEA 中聚合对象删除,目前设计是在根对象删除后,自动级联删除整个聚合树,要改的话比较麻烦,所以这一点还是冲突。...最后,也是非常重要,在数据库设计方面,SQLCE 4 基本和 SQLServer 是保持一致,支持 主键、、自增列、级联删除等。...这就使得 我们在 OEA ,不论是 AutoDB 还是 ORM,支持 SQLCE 都变得比较容易。 有的朋友会说,性能方面,SQLite 可比 SQLCE 快很多。

1.1K70

MySql---复习

级联操作 格式 测试级联操作 ---- MySQL约束(FOREIGN KEY) MySQL 约束(FOREIGN KEY)用来在两个表数据之间建立链接,它可以是一列或者多列。...id值 ---- 小总结 被约束表成为副表,约束别人表成为主表,设置在副表 主表(参考表)参考字段通常为主键 添加数据时,必须先添加主表,后添加副表 修改数据时,必须先修改副表,再修改主表...但是,我们希望直接修改或删除主表数据,从而影响副表数据,如删除部门表某个部门,直接自动删除员工表中被删除部门对于所有员工 这就是级联操作 ---- 格式 在定义时候追加以下内容: 级联修改:...ON UPDATE CASCADE 级联删除: ON DELETE CASCADE 这里选择修改表时候,添加约束 alter table 表名 add [constraint 约束名] 约束类型...(字段名) [引用]; 设置级联修改和删除关系 #先将表之前约束删除 ALTER TABLE emp DROP FOREIGN KEY emp_depart_fk; #修改表时,增加约束和级联约束

5.2K30

Flask中ORM框架之SQLAlchemy插件入门到弃坑

DName = db.Column(db.String("32"), default="动物名称") Q: 模型中外反向引用级联查询如何构建?...答: 官方文档使用关系 relationship 进行 反向引用即级联查询,注意点他不是映射在数据库之中他实际是Django隐型属性; # 基础语法 反向引用名称 = db.relationship...描述:级联数据之外关系 1:1 ForeignKey + Unique 1:M ForeignKey M:N 额外扩充关系表即多个ForeignKey 基础实例: 1.反向引用模型构建...2.使用关系 relationship 进行反向引用即级联查询; # Day3\App\models.py # 例如以下数据库模型声明 class Animal(db.Model): __...# 使用插入数据 @d3.route('/add_fdog/') def add_fdog(): fdog = FDog() # 插入数据根据字段中值排序规则为倒序 fdog.fid

3.1K10

约束

大家好,又见面了,我是你们朋友全栈君。 作用:1.保证数据完整性、一致性,更可靠。      ...2.设置约束两个表之间会有 父子关系 ,即字表中外字段取值范围 取决于 父表      3.设置一定程度上降低了数据库速度      4.字表中外字段数据类型要与父表中数据类型一致...建立语法:[constraint 键名] foreign key (子表字段名 ) references 父表 (父表字段名)        [on delete {restrict...cascade: on delete cascade on update cascade         当主表删除记录或更改被参照字段值时,从表会级联更新 :这个比较危险,容易级联把数据都删除...set null: on delete set null on update set null         当主表删除记录时,从表字段值变成 null         当主表更新主键字段值时,

1.6K20

Django中关系映射

=1) # on_delete级联删除动作 级联删除 级联删除,例如员工表中一项数据是部门ID,部门ID是部门表主键,如果是级联删除,当删除了部门A时候,会把所有属于部门A员工都给删除。...级联删除特殊字段 models.CASCADE:Django模拟SQL约束ON DELETE CASCADE,并删除包含ForeignKey对象 注意该CASCADE会有限查找是否有关联数据,先删除管理数据...") # 关联UserMit表中user_id对应主键 一对一(查询数据) ---- 正向查询 正向查询:直接通过属性查询,则为查询 # 通过绑定users_id查询用户,接着上面的创建数据来...反向关联属性为实例对象.引用类名(小写) 当反向引用不存在时候,则会触发异常 当UserId类中定义了约束,则UserMit类中会有一个UserId反向属性 class...一对多需要明确出具体角色,在多表设置 语法:当一个A类对象可以关联多个B类对象 class ClassRoom(models.Model): # 班级唯一 name = models.CharField

1.7K20

Django model,baseModel基类, migrate移行

复数名称用:verbose_name_plural管理画面标示名称是这样,默认加s图片4. default_related_name在外中设置反向查询字段名。...补充:on_delete在外中必须设置,表示级联关系。 级联关系:例,主表数据删除后,参照表键值,如何处理。  限制 insert参照表数据之前,主表必须先登录数据,以避免脏数据产生等。...CASCADE:默认值,级联。 例:product被删,order也删。 DO_NOTHING:不会被级联。...例:product被删,orderproduct不做任何处理SET_DEFAULT:配合default属性使用。假设A表依赖B表,B记录删除,A表字段重置为default属性设置值。...假设A表依赖B表,B记录删除,A表字段重置为NULL, 例:product被删,orderproduct,重置为NULL注:多对多字段不能设置on_delete级联关系。有空再研究。

99630
领券