sqlite3 外键作用原理和使用方法
2017-03-26 22:27
435 查看
转自http://zjx2988.blog.163.com/blog/static/9791033120150554232742/
1. sqlite3 默认为关闭外键限制的,如要打开,请执行如下命令:
sqlite3 外键的创建和使用方法一:
例如,我们创建如下两个表,Persons 和 Orders。
假如在 persons 已插入如下数据:
外键插入限制:
当执行如下命令往 orders 插入记录时:
发生错误 Error: foreign key constraint failed
由于 persons 中没有 id_p 为4记录而导致插入失败。
外键删除限制:
假设 orders 已插入如下数据:
当执行如下命令从 persons 删除记录时:
发生错误 Error: foreign key constraint failed
由于在 orders 中有记录其 id_p=1 导致不能直接从 persons 中删除,必需首先删除 orders 中所有 id_p=1 的记录,才能从 persons 中删除 id_p=1 的记录。
执行 drop table persons; 删除表格时,也必需确保 orders 中所有相关的记录全部删除时,删除表格才能成功。
外键更新限制:
假设 orders 已插入如下数据:
当执行如下命令更新 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。
外键插入限制:
与方法一保持一致。
外键删除限制:
假设 persons 中已插入方法一中的数据。且 orders 中插入了如下数据:
当执行如下命令从 persons 中删除记录时:
会成功删除 id_p=1 的记录,且连带着 orders 中所有 id_p=1 的记录会自动被删除。
执行 drop table persons; 删除表格时,会成功删除 persons,连带着 orders 中所有相关的记录也会被删除。
外键更新限制:
假设 persons 中已插入方法一中的数据。且 orders 中插入了如下数据:
当执行如下命令更新 persons 中的记录时:
update persons set id_p=4 where id_p=1;
会成功更新 id_p=1 的记录,且 orders 中的记录会自动更改为如下所示:
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
相关文章推荐
- SSM框架原理,作用及使用方法
- 解决django使用sqlite3的外键约束没作用及配置mysql库
- SSM框架原理,作用及使用方法
- SSM框架原理作用及使用方法
- SQL游标原理和使用方法
- Java keytool工具的作用及使用方法
- 论使用附加码方法在网络安全中的作用
- SQL游标原理和使用方法
- Application.SetCompatibleTextRenderingDefault的作用及使用方法
- epoll原理及使用方法
- [转]SQL游标原理和使用方法
- SQL游标原理和使用方法
- 游标原理和使用方法
- 理解va_list、va_start、va_arg、va_end原理及使用方法
- SQL游标原理和使用方法
- ForeignKeyConstraint 外键约束的使用及作用的学习!
- epoll原理及使用方法
- SQL游标原理和使用方法