用触发器实现SQLite的外键约束

SQL_触发器、外键约束 1、构造一个触发器audit_log,在向employees_test表中插入一条数据的时候,触发插入相关的数据到audit中。 CREATE TABLE employees_test( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );... 阅读详情
    最近在做数码相框上的嵌入式开发,开发过程中使用的SQLite数据库,但是编码的过程中,遇到个问题,SQLite不支持外键约束,外键约束会被解析但不会被执行。
    参考了网上的做法,自己做了个实验,用触发器来实现了SQLite的外键约束。
    建表语句:
CREATE TABLE jokeItem
(
    id integer primary key,
    content TEXT,
    classId integer
);

CREATE TABLE jokeClass
(
    classId integer primary key,
    className TEXT
); 

    创建插入触发器:
CREATE TRIGGER FK_INSERT
BEFORE INSERT ON jokeItem
FOR EACH ROW BEGIN
SELECT RAISE(ROLLBACK,'No this classId in jokeClass')
WHERE (SELECT classId FROM jokeClass WHERE classId = NEW.classId) IS NULL;
END;

    插入操作的外键支持效果:


    创建更新触发器:
CREATE TRIGGER FK_UPDATE
BEFORE UPDATE ON jokeItem
FOR EACH ROW BEGIN
SELECT RAISE(ROLLBACK,'No this classId in jokeClass')
WHERE (SELECT classId FROM jokeClass WHERE classId = NEW.classId) IS NULL;
END;

    更新操作的外键支持效果:


    创建删除触发器:
CREATE TRIGGER FK_DELETE
BEFORE DELETE ON jokeClass
FOR EACH ROW BEGIN
DELETE FROM jokeItem WHERE classId = OLD.classId;
END;

    删除操作的外键支持效果:
触发器解决外键约束问题 触发器是与表事件有关的特殊存储过程。它不能直接被执行,必须为表上的增、删、改事件所触发。外键要比触发器更快,但是我们经常会遇见外键约束的问题,触发器能解决外键不能处理的复杂关系。下面是一个实践的例子: 一、背景     在牛腩发布系统中,三个表(新闻类别、新闻、评论)之间的关系是一对多的关系,每个新闻类别可以有多条新闻,每条新闻可以有多条评论,主键为相应的id号,关系图如下: 阅读详情

相关推荐

[AbutionGraph] 报表制作-使用Grafana动态可视化知识图谱指标

使用开源报表可视化工具Grafana实时监控时序知识图谱数据仓库AbutionGraph中的数据,实时性报表查询, 满足单次百万千万级的数据查询,毫秒级查询延迟,亚秒级对千亿数据量汇总统计,每日过亿报表查询/多维分析/日志分析等数据指标...

图特摩斯科技-博客 4277

如何使用mysql的触发器实现外键约束

在mysql数据库中,有时会用到外键约束FOREIGN KEY。这些外键约束也可以使用触发器TRIGGER来实现。当然,外键约束和触发器都是不提倡使用的。因为外键约束和触发器容易给数据库服务器增加额外的负担,造成性能下降。甚至可能造成频发的锁等待或者死锁。 下边举例说明如何用触发器来实现外键约束,包括外键级联更新和删除。 假设有students和scores两张表,并且存在外键约束关系: DROP TABLE IF EXISTS `students`; CREATE TABLE `students`

u010024893的专栏 3151

PRPD图谱分析从入门到精通:5种典型放电模式的识别手册

本文详细解析PRPD图谱分析技术,重点介绍电晕放电、悬浮放电等5种典型放电模式的识别方法。通过37组真实案例对比,提供关键识别区和诊断流程图模板,帮助工程师快速掌握变电站设备状态监测的核心技能,提升绝缘缺陷诊断准确率。

weixin_29214199的博客 466

【原创】关于自身表的外键触发器实现

    目前遇到这样一个外键定义: `t_girl`.`tb1`   CONSTRAINT `fk_1` FOREIGN KEY (`r_id`) REFERENCES `tb1` (`id`) ON DELETE CASCADE   目的是对于自己的另外一个字段进行约束, 其实这样看来, 后面的级联删除就没有必要了,因为针对的是同一张表的同一条记录。 /* Trigger stru...

weixin_33801856的博客 176

【Tessent Shell Users Manual】【Ch3】Design Introspection and Editing(未完待续)

Tessent Shell 提供了一系列用于检查(examining/introspecting)和编辑design的命令。

Tranquil_ovo的博客 1731

Linux之SUSE系统SAP-HANA经常系统内存不足使得SAP应用不能使用解决方案

问题描述 Linux内存使用量超过阈值,使得sap应用程序无可用内存,最终导致程序崩溃。 问题原因 自己查阅了一些资料,也基于zabbix的可用内存和实际不太一样入手去找原因发现问题出现于Cached的值过大,导致系统没有可以再分配的内存空间。Cached只要用来缓存文件的,经常读写的文件会被缓存到Cached中,可以增加读写效率,该功能是Linux系统内核提供的,而SAP-HANA的日志文件很大...

liuxiangyang_的博客 6709

MYSQL_使用外键约束(constraint)或触发器(trigger)来进行级联更新、删除

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33757911的博客 659

第55篇:数据隐私保护技术盘点——差分隐私、同态加密与它们的坑(踩坑总结)

数据隐私保护是AI工程化中必须严肃对待的课题。差分隐私和同态加密是两把利器,但也都是“重武器”,使用不当反而会伤及自身。差分隐私像“模糊处理”,通过加噪来保证统计安全性,要小心管理隐私预算和效用权衡。同态加密像“保险箱里打算盘”,保证了计算的精确性,但必须承受巨大的性能和工程复杂度代价。我的建议是:从小规模实验开始,先用DP-SGD在MNIST/CIFAR-10等标准数据集上感受噪声与精度的关系;再用TenSEAL等易用的库尝试一个加密逻辑回归,体会密文膨胀和速度延迟。

ai_blue_pm的博客 280

SQLite外键的实现

SQLite外键的实现   SQLite现在的版本还不支持外键功能,虽然外键约束会被解析,但执行的时候被忽略。但我们可以手动实现外键,实现的原理就是触发器。下面是我的实现方法。主要是针对一个例子:先看下面两个表。 CREATE TABLE PLU (PluID integer NOT NULL PRIMARY KEY,                   Name text NOT NULL,...

lzd20021683的专栏 345

涨点神器:基于YOLOv8的SPD-Conv小目标检测实战教程——让低分辨率场景检测精度飙升

从代码修改到场景落地,每一步都围绕“提升检测精度”这个核心目标,而实际数据也证明了这项技术的强悍——它不是实验室里的花拳绣腿,而是能真正解决工业痛点的涨点神器。在实际场景中,比如无人机巡检的低分辨率航拍图中,对电线、小设备的检测,YOLOv8-SPD的漏检率降低了70%以上。落地时,只需将训练好的YOLOv8-SPD模型部署到边缘设备或云端,即可享受其在小目标、低分辨率场景下的强大性能。的特征融合模块中,通过插入SPD-Conv,让模型在处理小目标时,既能保留空间细节,又能增强通道维度的特征表达。

m0_71589036的博客 157

Serial RapidIO Gen2 IP 说明(三)

前言 继续接着上篇文章,介绍Serial RapidIO Gen2 IP 的具体端口信息。 一、端口描述 1、缓冲设计接口 2、物理层接口 参考说明 【1】Serial RapidIO Gen2 v4.1https://china.xilinx.com/content/dam/xilinx/support/documentation/ip_documentation/srio_gen2/v4_1/pg007_srio_gen2.pdf ...

记录所学,分享知识,结识挚友 1319

SQLite用触发器来替代外键约束

SQLite用触发器来替代外键约束 CREATE TABLE [Category] (   [Pkid] INTEGER  PRIMARY KEY AUTOINCREMENT NOT NULL,   [CategoryName] NVARCHAR(32)  NOT NULL,   [CategoryGuid] char(36)  UNIQUE NOT NULL,   [Ca

挨踢笔记 2455

Arduino ESP8266自定义配置分区表

ESP8266自定义分区表配置 随着项目的不断开发,项目文件也不断在增大,在没有考虑更换主硬件的条件下,最大开发利用有限资源势在必行,所以今天带来ESP8266自定义分区表的配置。 我这里以版本:2.7.4版本为例,后面的版本也是支持的。 注意:自定义分区表特别要注意和你的硬件相对应,flash芯片的大小决定这个分区是否有效,否则有意想不到的事情发现。 自定义分区表的几个重要参数 /* Flash Split for 4M chips */ /* sketch @0x40200000 (~1019K

perseverance51博客 1725

Android数据库SQLite表内设置外键

Android数据库SQLite表内设置外键 介绍 Android默认的数据是SQLite,但SQLite3.6.19之前(在2.2版本中使用的是3.6.22,因此如果你的应用只兼容到2.2版本就可以放心使用外键功能)是不支持外键的,如果有两张表需要关联,用外键是最省事的,但不支持的话怎么办呢?这里就有一个解决办法,就是用事务将两张表关联起来,并且最后生成一张视图。

Before night,Good night. 3055

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数据库外键:原理、实现与最佳实践

外键是关系型数据库中实现表间关联的核心机制,通过引用主键确保数据完整性。其工作原理基于引用约束,强制要求外键值必须存在于被引用表的主键中。在数据库设计与优化中,外键不仅能维护数据一致性,还能简化复杂查询操作。实际应用时需权衡性能与完整性,通过索引优化、批量操作处理等技巧提升效率。在SQLite 3.11等特定版本中,需注意外键的默认启用状态和功能限制。常见于订单系统、用户关系管理等场景,与ORM框架协同工作时需特别注意事务处理。

weixin_30899023的博客 172

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SQLite不支持的SQL特性

      SQLite 不支持的 SQL 特性        相对于试图列出 SQLite 支持的所有 SQL92 特性,只列出不支持的部分要简单得多。下面显示的就是 SQLite 所不支持的 SQL92 特性。    这个列表的顺序关系到何时一个特性可能被加入到SQLite。接近列表顶部的特性更可能在不远的将来加入。接近列表底部的特性尚且

WEB3D关注 682

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C# SQLite高级功能示例

本文主要介绍了SQLite高级功能的使用,通过一个案例详细介绍了各种高级功能的使用情况,更方便的让读者理解知识。

可喜~可乐的博客 1572

22、SQLite进阶完全指南:Python类封装+事务索引+多表关联

摘要 《SQLite进阶完全指南》是一篇5000+字的实战教程,重点讲解Python环境下SQLite的高级应用技巧。文章从类封装最佳实践入手,详细展示了如何通过Python类实现数据库连接的复用、智能增删改查操作以及批量处理优化。核心内容包括事务控制机制、索引调优策略和多表关联查询等进阶技术,帮助开发者应对高并发写入、大数据量查询等复杂场景。教程采用"Python代码+SQL原理+流程图解"三维呈现方式,提供可直接复用的完整类实现,涵盖从单表操作到多表协同的全流程解决方案,旨在提升SQ

专注将Python与AI工程化落地。擅用测试思维拆解复杂模型,聚焦数据质量、自动化评估与管道优化。 789
上一篇: SQLite数据库建立外键的方法
下一篇: SQLite的SQL语法
cll131421
博客等级 码龄19年 68粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值