sqlite3 外键作用原理和使用方法

来源:互联网 发布:mac 控制台 删除记录 编辑:程序博客网 时间:2024/06/06 12:29

转自http://zjx2988.blog.163.com/blog/static/9791033120150554232742/
1. sqlite3 默认为关闭外键限制的,如要打开,请执行如下命令:

PRAGMA FOREIGN_KEYS=ON;
  1. sqlite3 外键的创建和使用方法一:
    例如,我们创建如下两个表,Persons 和 Orders。
create table persons(id_p integer not null,lastname varchar(20),firstname varchar(20),address varchar(100),city varchar(100), primary key(id_p));create table orders(id_o integer not null,orderno not null,id_p integer,primary key(id_o),foreign key(id_p) references persons(id_p));

假如在 persons 已插入如下数据:

id_p  lastname   firstname     address             city  1      Adams    John       Oxford Street       London  2      Bush     George     Fifth Avenue        New York  3      Carter   Thomas     Changan Street      Beijing

外键插入限制:
当执行如下命令往 orders 插入记录时:

insert into orders values(1, 22456, 4);

发生错误 Error: foreign key constraint failed
由于 persons 中没有 id_p 为4记录而导致插入失败。

外键删除限制:
假设 orders 已插入如下数据:

id_o  orderno  id_p  1      22456     1

当执行如下命令从 persons 删除记录时:

delete from persons where id_p=1;

发生错误 Error: foreign key constraint failed
由于在 orders 中有记录其 id_p=1 导致不能直接从 persons 中删除,必需首先删除 orders 中所有 id_p=1 的记录,才能从 persons 中删除 id_p=1 的记录。
执行 drop table persons; 删除表格时,也必需确保 orders 中所有相关的记录全部删除时,删除表格才能成功。

外键更新限制:
假设 orders 已插入如下数据:

id_o  orderno  id_p  1      22456     1

当执行如下命令更新 persons 的记录时:
update persons set id_p=4 where id_p=1;
发生错误 Error: foreign key constraint failed
因为 orders 存在 id_p=1 的记录,所有不能在 persons 中直接更新 id_p=1 的记录,必需从 orders 中删除所有 id_p=1 的记录才能在 persons 中任相应的更新。

  1. sqlite3 外键的创建和使用方法二:
    如果想从 persons 中删除或更新相应的记录后,会在 orders 中有相应的体现而不是提示错误。则可按如下方式创建 orders。
create table persons(id_p integer not null,lastname varchar(20),firstname varchar(20),address varchar(100),city varchar(100),primary key(id_p));create table orders(id_o integer not null,orderno integer not null,id_p integer,primary key(id_o),foreign key(id_p) references persons(id_p) on delete cascade on update cascade);

外键插入限制:
与方法一保持一致。

外键删除限制:
假设 persons 中已插入方法一中的数据。且 orders 中插入了如下数据:

id_o  orderno  id_p  1      22456     1

当执行如下命令从 persons 中删除记录时:

delete from persons where id_p=1;

会成功删除 id_p=1 的记录,且连带着 orders 中所有 id_p=1 的记录会自动被删除。
执行 drop table persons; 删除表格时,会成功删除 persons,连带着 orders 中所有相关的记录也会被删除。

外键更新限制:
假设 persons 中已插入方法一中的数据。且 orders 中插入了如下数据:

id_o  orderno  id_p  1      22456     1  2      22457     1

当执行如下命令更新 persons 中的记录时:
update persons set id_p=4 where id_p=1;
会成功更新 id_p=1 的记录,且 orders 中的记录会自动更改为如下所示:

id_o  orderno  id_p  1      22456     4  2      22457     4
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 生殖保健服务证怎么办 关机后自动开机怎么办 大连卖房户口怎么办 在警务室被辅警骂了怎么办 上海微信怎么办居住证 公共自行车卡消磁怎么办 港澳通行证到期了怎么办 徐海路大桥对面怎么办 没有买公务机票怎么办 电脑黑屏怎么办重启也没有用 航空公司原因航班取消怎么办 政府采购2次废标怎么办 车卖给别人车牌怎么办 医用耗材中标后怎么办 国六标准国五车怎么办 年审标志丢了怎么办 大专不过统招线怎么办 雅安停天然气了怎么办 调档函过期了怎么办 临时工想涨工资怎么办 辞职了职称公需课怎么办 一师一优课有账号忘记密码怎么办? 长沙转户口档案怎么办 二战迁户口档案怎么办 本人户口页丢失怎么办 户口迁出原籍档案怎么办 户口本丢了一页怎么办 户口本少了一页怎么办 户口页丢了怎么办 公司要社保卡怎么办 公务员面试缺考怎么办 word文档未标签怎么办 暂住证到期了怎么办t 考驾照没暂住证怎么办 南京暂住证过期了怎么办 南京桥北暂住证怎么办 冠状沟红痒一年多了怎么办 介仓身上痒怎么办 专升本考试怎么办 专升本毕业论文怎么办 手机扫码模糊怎么办