sqlite3 外键的使用

1.首先打开外键开关.

因为sqlite3外键默认是关闭的,所以你要使用就要先打开.

PRAGMA foreign_keys = ON

//要在bridge.h里引入 #import <SQLite3.h>
NSString *sql = @"PRAGMA foreign_keys = ON";  
sqlite3_prepare_v2(sqlite, [sql UTF8String], -1, &stmt, NULL);  
sqlite3_step(stmt);  

使用FMDB:

// objective-c
[db executeUpdate:@"PRAGMA foreign_keys=ON;”];
// swift
db.executeStatements("PRAGMA foreign_keys=ON;”)

2.设置foreign key

1.先建一个父表

 "CREATE TABLE IF NOT EXISTS parent (id text PRIMARY KEY NOT NULL);"

2.再建一个子表

"CREATE TABLE IF NOT EXISTS child (id text PRIMARY KEY NOT NULL ,parentID TEXT,FOREIGN KEY (parentID) REFERENCES parent(id) ON DELETE CASCADE ON UPDATE CASCADE);"

child表里的parentID关联到parent表里的id.

ON DELETE 和 ON UPDATE,表示当发生delete和update时,会发生什么行为

  • NO ACTION:默认的,表示没有什么行为.
  • RESTRICT:当有一个child关联到parent时,禁止delete或update parent
  • SET NULL:当parent被delete或update时,child的的关联字段被置为null(如果字段有not null,就出错)
  • SET DEFAULT:类似于SET NULL (是不是设置默认值?没有试过)
  • CASCADE:将实施在parent上的删除或更新操作,传播给你吧与之关联的child上.
    对于 ON DELETE CASCADE, 同被删除的父表中的行 相关联的子表中的每1行,也会被删除.
    对于ON UPDATE CASCADE, 存储在子表中的每1行,对应的字段的值会被自动修改成同新的父键匹配

3.使用注意

不论update,insert,replace,要涉及到外键的改变的,要确保父表的存在,否则会因为约束的存在,导致操作失败.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,854评论 18 139
  • 本文包括:1、一对多结构的准备2、双向关联与单向关联3、级联保存4、级联删除5、cascade 属性——级联6、i...
    廖少少阅读 1,235评论 1 6
  • 外键的定义: 如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。 外键的作用 ...
    诗人小坏阅读 1,139评论 0 0
  • 添了一份浓烈反衬离别
    2020号阅读 386评论 38 32