`

SQLite外键的实现

 
阅读更多

SQLite外键的实现

 

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

 

CREATE TABLE PluSuit (SuitID integer NOT NULL PRIMARY KEY,
                     Price double NOT NULL,
                     Property text,
                     Name text NOT NULL,
                     PluID integer NOT NULL CONSTRAINT fk_plu_id REFERENCES PLU(PluID) ON DELETE   

                    CASCADE,Numbers integer NOT NULL);
这样就为PluSuit表建立对PLU表的外键约束,这样就可以实现CORE2数据需求中的要求,问题是SQLite不执行这个约束,所以这样创建以后,我们还要再创建三个触发器,INSERT,UPDATE,DELETE触发器:

 create trigger plusuit_insert_trigger

 BEFORE INSERT ON PluSuit
  FOR EACH ROW BEGIN
      SELECT RAISE(ROLLBACK, 'insert on table "PluSuit" violates foreign key constraint "fk_plu_id"')
      WHERE  (SELECT PluID FROM PLU WHERE PluID = NEW.PluID) IS NULL;
  END;

 

 CREATE TRIGGER plusuit_update_trigger

 BEFORE UPDATE ON PluSuit
  FOR EACH ROW BEGIN
      SELECT RAISE(ROLLBACK, 'update on table "PluSuit" violates foreign key constraint "fk_plu_id"')
      WHERE  (SELECT PluID FROM PLU WHERE PluID = NEW.PluID) IS NULL;
  END;

 

CREATE TRIGGER fkd_plusuit_pluid
BEFORE DELETE ON PLU
FOR EACH ROW BEGIN
      DELETE from PluSuit WHERE PluID = OLD.PluID;
END;

 

下面我们分别来作三个实验:
一、插入实验
首先我们在PLU里面插入一个数据(一双anta运动鞋的信息):
insert into PLU values(1,'anta','sport',299,100,'sales','ok');
insert into PLU values(3,'nike','sport',699,200,'sales','ok');
然后我们开始在PluSuit里面插入一个数据(两双一起打折卖):
insert into PluSuit values(100,350,'old','anta',1,2);成功了
insert into PluSuit values(100,350,'old','anta',2,2);失败,得到正确的错误信息

更新实验
update PluSuit set PluID=2 where SuitID=100;失败,得到正确的错误信息
update PluSuit set PluID=3 where SuitID=100;成功

删除实验
delete from PLU where PluID=1;
查看PluSuit中数据被正确删除。
实验结果,触发器的实现完全正确。 

 

转:http://www.sqlite.com.cn/MySqlite/6/403.Html

 

分享到:
评论

相关推荐

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

    ### 使用触发器实现SQLite的外键约束 #### 背景与问题介绍 在进行数码相框嵌入式开发的过程中,开发团队选择了SQLite作为数据库管理系统。然而,在编码过程中遇到了一个较为棘手的问题:SQLite默认情况下不支持...

    SQLite安装程序

    5. **SQLite外键.htm**:这可能是一个关于SQLite外键约束的HTML文档。外键是关系数据库中保持数据完整性的重要机制,它确保了引用的完整性和一致性。SQLite支持外键,但默认情况下是禁用的,需要在创建数据库时明确...

    默认开启外键约System.Data.SQLite.dll束重新编译版1.0.85.0

    System.Data.SQLite.dll默认开启外键约束重新编译版,文件版本1.0.85.0,官网源码,除了开启外键约束,未作任何修改,内含.net2.0、.net4.0的32bit和64bit的release,以及源码修改说明。

    C#从实体类映射到数据库(sqlite)

    在软件开发中,数据持久化是一个关键环节,而将实体类映射到数据库是实现这一目标的常用方式。本文将详细讲解如何使用C#语言配合SQLite数据库进行这项工作,为其他语言和数据库的映射提供参考。 首先,我们需要了解...

    基于Python(tkinter)+sqlite3的图书信息管理系统(GUI图形界面)_数据库图书信息管理系统

    在图书信息管理系统中,可能包含了如添加书籍、查询书籍、修改信息等功能,这些功能可以通过Tkinter的事件驱动编程实现。 3. **SQLite3数据库**:SQLite是一个轻量级的关系型数据库,无需单独的服务器进程即可嵌入...

    Sqlite Expert license key

    1. **数据库设计**:SQLite Expert允许用户通过拖放方式创建和编辑表格,设置字段类型、约束(主键、唯一、外键等)、默认值和自增属性。此外,还可以创建和管理索引,优化查询性能。 2. **SQL编辑与调试**:内置的...

    sqlite3使用详解

    20. SQLITE_CONSTRAINT (19): 由于约束冲突(如主键、外键约束)导致操作失败。 21. SQLITE_MISMATCH (20): 数据类型不匹配,例如在插入数据时类型不符。 22. SQLITE_MISUSE (21): 对SQLite库的误用,可能是API调用...

    SqliteClient for D7

    10. **存储过程与触发器**:虽然SQLite本身不直接支持存储过程,但可以通过自定义函数和触发器实现类似功能,SqliteClient也提供了相应的接口。 通过学习和使用SqliteClient for D7,Delphi开发者可以快速掌握...

    SQLite数据库读写示例

    SQLite支持外键,这允许在不同表之间建立关系,实现数据的引用完整性。例如,创建一个`grades`表,其中`student_id`是`students`表的外键: ```sql CREATE TABLE grades ( id INTEGER PRIMARY KEY, student_id ...

    Sqlite可视化工具SqliteDeveloper

    你可以新建表,设置字段类型、长度、约束等属性,并轻松调整表之间的关系,如外键。 3. **数据操作**:该工具提供了一套完整的数据操作工具,包括添加、编辑、删除记录,以及批量导入和导出数据。这对于数据的录入...

    SQLite Expert Professional 2024 是一个为 SQLite3 创建和管理数据库而开发

    它提供了高级选项,如表、列、索引和外键的可视化编辑。它还为导入和导出数据提供了多种工具。用户可以轻松地从 CSV 和 ADO 文件等来源导入数据,也可以将数据导出为 Excel 和 SQL 脚本等格式。通过拖放操作,SQLite...

    pbootcms数据sqlite转mysql数据库

    通过以上步骤和知识点,我们可以成功地将一个基于SQLite的pbootcms3.0.5网站的数据迁移到MySQL数据库,实现“完美转换”。在实际操作中,一定要仔细检查每个步骤,确保数据迁移的准确性和完整性。

    DB Browser for SQLite 数据库查看工具

    - 数据库设计:用户可以创建新表、修改表结构,定义主键、外键、索引等数据库元素。 - 图形化查询构建器:对于不熟悉SQL的用户,可以使用图形化工具构建查询,简化操作过程。 2. **安装与使用**: - 下载安装:...

    将postgres数据导入到sqlite

    这包括处理主键、外键、索引和其他约束。 总结来说,将PostgreSQL数据导入SQLite涉及多个步骤,包括备份、转换和导入。通过使用专门的工具如"Postgres2Sqlite",可以简化这个过程,特别是当需要频繁进行数据迁移或...

    SQLiteStudio-3.4.4-windows-x64-installer.zip

    4. **数据库设计**:可以设计和修改表结构,包括添加、删除或修改字段,设置主键、外键等关系。 5. **备份与导入导出**:支持数据库的备份和恢复,以及将数据导入和导出到CSV、XML、JSON等多种格式。 6. **图表和...

    sqlite expert professional 官方注册版

    4. 导入/导出数据:你可以将数据从CSV、XML、Excel等格式导入到SQLite,或者将SQLite数据导出到其他格式,实现数据迁移和备份。 5. 报表和图表:创建基于数据库数据的定制报表和图表,帮助数据分析和可视化。 6. ...

    SQLite Expert Professional 5(含注册码)

    2. **表管理**:创建、修改和删除数据库表,包括定义字段类型、主键、外键、索引等。还可以导入和导出数据,支持多种数据格式如CSV、XML、Excel等。 3. **查询构建器**:提供可视化查询构建工具,通过拖放字段和...

    sqlitestudio

    同时,Sqlitestudio也支持创建和管理触发器,实现特定条件下的自动数据处理。 8. 权限管理:虽然SQLite本身没有复杂的权限系统,但Sqlitestudio提供了基本的用户管理和权限控制,帮助用户保护数据库安全。 9. 日志...

    PyPI 官网下载 | sqlite3-to-mysql-1.4.5.tar.gz

    在实际使用过程中,`sqlite3-to-mysql`库提供了许多自定义选项,如指定要迁移的特定表、处理数据类型转换、处理主键和外键关系等。这些功能使得用户可以根据具体需求对迁移过程进行精细控制,避免数据丢失或错误。 ...

    SQL Server数据导入SQLite工具

    2. **数据库结构**:SQL Server与SQLite的表结构可能存在差异,例如字段类型、主键约束、外键约束等。工具需要处理这些差异,确保转换后的SQLite数据库能正确反映原始SQL Server的结构。 3. **数据类型映射**:SQL ...

Global site tag (gtag.js) - Google Analytics