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
发表评论
-
资料上传备份
2012-07-02 07:28 0对付对付对付对付 -
Android-sharedUserId数据权限
2012-05-02 10:16 1444Android-sharedUserId数据权限 An ... -
Android Service学习之本地服务
2012-04-18 10:28 862转: Android Service学习之本地服务 htt ... -
match_parent和fill_parent的区别 .
2012-02-18 11:49 1839match_parent和fill_parent的区别 有 ... -
Android中SQLiteOpenHelper类的onUpgrade方法的作用
2012-02-09 11:50 4600Android中SQLiteOpenHelper类的onUpg ... -
Android启动各种系统服务线程
2012-02-09 10:59 1935Android启动各种系统服务 ... -
android
2012-02-08 09:22 0Android数据库内容变化的监听 首先介绍内容监 ... -
在线升级Android应用程序的思路
2012-02-07 11:34 876在线升级Android应用程序的思路 http://www. ... -
Android数据库内容变化的监听
2012-02-07 11:31 6033Android数据库内容变化的监听 首先介绍内容监 ... -
android中的数据库操作
2012-02-07 10:50 1450android中的数据库操作 ... -
SQLiteOpenHelper类与自动升级数据库
2012-02-07 10:31 2281SQLiteOpenHelper类与自动升级数据库 S ... -
29日修改数据库设计
2012-01-29 15:24 0数据表设计: 账号信息表account ... -
最新数据库设计
2012-01-28 21:21 0数据表设计: 工资管理 账号信息表Acc ... -
数据库设计
2012-01-11 15:27 0数据库设计 信息表:infotypecreate ta ... -
Android到处都在使用的回调分析
2011-12-21 15:53 3545Android到处都在使用的回调分析 ... -
android中LayoutInflater的使用
2011-12-21 11:35 1932android中LayoutInflater的使用 ... -
cmd下操作mysql
2011-12-20 14:11 985cmd下操作mysql 连接mysql服务器 mysql ... -
SIM卡满处理流程分析
2011-12-19 15:15 1881SIM卡满处理流程分析 //框架层分析 // SMSD ... -
短信发送状态报告流程分析
2011-12-19 15:07 2392短信发送状态报告流程分析 //应用层分析: //Sms ... -
Android平台 短信接送流程剖析(含编码)
2011-12-16 15:29 3227Android平台 短信接送流程剖析(含编码) ...
相关推荐
### 使用触发器实现SQLite的外键约束 #### 背景与问题介绍 在进行数码相框嵌入式开发的过程中,开发团队选择了SQLite作为数据库管理系统。然而,在编码过程中遇到了一个较为棘手的问题:SQLite默认情况下不支持...
5. **SQLite外键.htm**:这可能是一个关于SQLite外键约束的HTML文档。外键是关系数据库中保持数据完整性的重要机制,它确保了引用的完整性和一致性。SQLite支持外键,但默认情况下是禁用的,需要在创建数据库时明确...
System.Data.SQLite.dll默认开启外键约束重新编译版,文件版本1.0.85.0,官网源码,除了开启外键约束,未作任何修改,内含.net2.0、.net4.0的32bit和64bit的release,以及源码修改说明。
在软件开发中,数据持久化是一个关键环节,而将实体类映射到数据库是实现这一目标的常用方式。本文将详细讲解如何使用C#语言配合SQLite数据库进行这项工作,为其他语言和数据库的映射提供参考。 首先,我们需要了解...
在图书信息管理系统中,可能包含了如添加书籍、查询书籍、修改信息等功能,这些功能可以通过Tkinter的事件驱动编程实现。 3. **SQLite3数据库**:SQLite是一个轻量级的关系型数据库,无需单独的服务器进程即可嵌入...
1. **数据库设计**:SQLite Expert允许用户通过拖放方式创建和编辑表格,设置字段类型、约束(主键、唯一、外键等)、默认值和自增属性。此外,还可以创建和管理索引,优化查询性能。 2. **SQL编辑与调试**:内置的...
20. SQLITE_CONSTRAINT (19): 由于约束冲突(如主键、外键约束)导致操作失败。 21. SQLITE_MISMATCH (20): 数据类型不匹配,例如在插入数据时类型不符。 22. SQLITE_MISUSE (21): 对SQLite库的误用,可能是API调用...
10. **存储过程与触发器**:虽然SQLite本身不直接支持存储过程,但可以通过自定义函数和触发器实现类似功能,SqliteClient也提供了相应的接口。 通过学习和使用SqliteClient for D7,Delphi开发者可以快速掌握...
SQLite支持外键,这允许在不同表之间建立关系,实现数据的引用完整性。例如,创建一个`grades`表,其中`student_id`是`students`表的外键: ```sql CREATE TABLE grades ( id INTEGER PRIMARY KEY, student_id ...
你可以新建表,设置字段类型、长度、约束等属性,并轻松调整表之间的关系,如外键。 3. **数据操作**:该工具提供了一套完整的数据操作工具,包括添加、编辑、删除记录,以及批量导入和导出数据。这对于数据的录入...
它提供了高级选项,如表、列、索引和外键的可视化编辑。它还为导入和导出数据提供了多种工具。用户可以轻松地从 CSV 和 ADO 文件等来源导入数据,也可以将数据导出为 Excel 和 SQL 脚本等格式。通过拖放操作,SQLite...
通过以上步骤和知识点,我们可以成功地将一个基于SQLite的pbootcms3.0.5网站的数据迁移到MySQL数据库,实现“完美转换”。在实际操作中,一定要仔细检查每个步骤,确保数据迁移的准确性和完整性。
- 数据库设计:用户可以创建新表、修改表结构,定义主键、外键、索引等数据库元素。 - 图形化查询构建器:对于不熟悉SQL的用户,可以使用图形化工具构建查询,简化操作过程。 2. **安装与使用**: - 下载安装:...
这包括处理主键、外键、索引和其他约束。 总结来说,将PostgreSQL数据导入SQLite涉及多个步骤,包括备份、转换和导入。通过使用专门的工具如"Postgres2Sqlite",可以简化这个过程,特别是当需要频繁进行数据迁移或...
4. **数据库设计**:可以设计和修改表结构,包括添加、删除或修改字段,设置主键、外键等关系。 5. **备份与导入导出**:支持数据库的备份和恢复,以及将数据导入和导出到CSV、XML、JSON等多种格式。 6. **图表和...
4. 导入/导出数据:你可以将数据从CSV、XML、Excel等格式导入到SQLite,或者将SQLite数据导出到其他格式,实现数据迁移和备份。 5. 报表和图表:创建基于数据库数据的定制报表和图表,帮助数据分析和可视化。 6. ...
2. **表管理**:创建、修改和删除数据库表,包括定义字段类型、主键、外键、索引等。还可以导入和导出数据,支持多种数据格式如CSV、XML、Excel等。 3. **查询构建器**:提供可视化查询构建工具,通过拖放字段和...
同时,Sqlitestudio也支持创建和管理触发器,实现特定条件下的自动数据处理。 8. 权限管理:虽然SQLite本身没有复杂的权限系统,但Sqlitestudio提供了基本的用户管理和权限控制,帮助用户保护数据库安全。 9. 日志...
在实际使用过程中,`sqlite3-to-mysql`库提供了许多自定义选项,如指定要迁移的特定表、处理数据类型转换、处理主键和外键关系等。这些功能使得用户可以根据具体需求对迁移过程进行精细控制,避免数据丢失或错误。 ...
2. **数据库结构**:SQL Server与SQLite的表结构可能存在差异,例如字段类型、主键约束、外键约束等。工具需要处理这些差异,确保转换后的SQLite数据库能正确反映原始SQL Server的结构。 3. **数据类型映射**:SQL ...