sqlite3 外键作用原理和使用方法
来源:互联网 发布:mac 控制台 删除记录 编辑:程序博客网 时间:2024/06/06 12:29
转自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 外键作用原理和使用方法
- PreTranslateMessage作用和使用方法
- PreTranslateMessage作用和使用方法
- PreTranslateMessage作用和使用方法
- PreTranslateMessage作用和使用方法
- PreTranslateMessage作用和使用方法
- PreTranslateMessage作用和使用方法
- PreTranslateMessage作用和使用方法
- PreTranslateMessage作用和使用方法
- PreTranslateMessage作用和使用方法
- PreTranslateMessage作用和使用方法
- PreTranslateMessage作用和使用方法
- PreTranslateMessage作用和使用方法
- PreTranslateMessage作用和使用方法
- PreTranslateMessage作用和使用方法
- PreTranslateMessage作用和使用方法
- PreTranslateMessage作用和使用方法
- PreTranslateMessage作用和使用方法
- 基数排序
- 数据库学习实践(四、五)--分页浏览、查询数据
- poj1789
- Ubuntu下编辑器gcc的使用
- Android 自定义ListView——下拉刷新&上拉加载
- sqlite3 外键作用原理和使用方法
- Excel表格数据导入到SQLServer数据库
- md5加密 java打包
- 知网查重报告如何看
- springboot
- 【Coursera Machine Learning】 Week1 学习笔记
- windows安装lxml
- LCS(Longest Common Subsequence 最长公共子序列)
- 两种筛法比较