您的位置:首页 > 数据库

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

2017-03-26 22:27 435 查看
转自http://zjx2988.blog.163.com/blog/static/9791033120150554232742/

1. sqlite3 默认为关闭外键限制的,如要打开,请执行如下命令:

PRAGMA FOREIGN_KEYS=ON;


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 中任相应的更新。

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sqlite3