码迷,mamicode.com
首页 > 数据库 > 详细

SQLite3:外键约束

时间:2018-02-27 21:22:41      阅读:347      评论:0      收藏:0      [点我收藏+]

标签:htm   指定   就是   rom   字段   href   play   fine   外键约束   

1.使用外键约束前必须确定sqlite3是恰当的编译版本,原文:In order to use foreign key constraints in SQLite, the library must be compiled with neither SQLITE_OMIT_FOREIGN_KEY or SQLITE_OMIT_TRIGGER defined.

2.外键开关

必须使用pragma打开外键开关以支持外键约束。

sqlite> PRAGMA foreign_keys;
0
sqlite> PRAGMA foreign_keys = ON;
sqlite> PRAGMA foreign_keys;
1
sqlite> PRAGMA foreign_keys = OFF;
sqlite> PRAGMA foreign_keys;
0

3.外键语句如图(来自sqlite3文档):

技术分享图片

 

4.术语

sqlite中使用父表、子表、父键、子键来描述外键约束。

5.约束性质

子表的记录的外键必须为空或存在父表中,若在父表中则必须为父表的主键或具有unique选项的字段。

也就是一下必须恒为真:

child_table_foreign_key IS NULL OR EXISTS(SELECT primary_key_or_unique_col FROM parent_table WHERE parimary_key_or_unique_col=chidl_table_foreign_key)

 

当父键所对应的子表记录还存在时,默认情况下不允许删除父键所对应记录。可以使用on delete 或on update选项指定操作。

 

当必须删除父键对应的子表中的记录时(级联删除),可以使用触发器。

6.创建具有外键约束的表

CREATE TABLE artist( artistid INTEGER PRIMARY KEY, artistname TEXT ); CREATE TABLE track(
 trackid INTEGER,
 trackname TEXT,
 trackartist INTEGER,
 FOREIGN KEY(trackartist) REFERENCES artist(artistid)
);

CREATE TABLE track(
 trackid INTEGER,
 trackname TEXT,
 trackartist INTEGER REFERENCES artist(artistid)
);

注:使用第二种写法时,貌似MySQL5.0的外键约束会不起作用。因此推荐第一种写法,并最好在前面加上约束名CONSTRAINT symbol;

7.ON DELETE and ON UPDATE Actions

未完,参加

http://www.sqlite.org/foreignkeys.html#fk_actions

SQLite3:外键约束

标签:htm   指定   就是   rom   字段   href   play   fine   外键约束   

原文地址:https://www.cnblogs.com/aqzz/p/2400068.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!