当前位置:Gxlcms > 数据库问题 > SQLite3:外键约束

SQLite3:外键约束

时间:2021-07-01 10:21:17 帮助过:158人阅读

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   外键约束   

人气教程排行