SQLite3外键约束之ON UPDATE/DELETE

2020年12月15日 / 6次阅读 / Last Modified 2020年12月15日
SQLite

数据库的外键约束虽然有一定开销,但是应用在保证数据的一致性时,还是很有用的。存在约束关系的外键(FK)也不是一成不变,有两个更强的约束条件,ON UPDATE和ON DELETE。

ON UPDATE和ON DELETE后面可以定义动作有:NO ACTION, RESTRICT, SET NULL, SET DEFAULT 或者 CASCADE。

  • NO ACTION,就是什么都不做;
  • RESTRICT,不允许,即不允许FK更新或删除;
  • SET NULL,当FK更新或删除时,set null;
  • SET DEFAULT,当FK更新或删除时,set default,这个default值来自create table时的定义;
  • CASCADE,当FK更新时,自己也更新;当FK删除时,自己也删除;

下面是一个 on delete cascade的测试:

sqlite> create table aa(id integer primary key);
sqlite> insert into aa values(null);
sqlite> insert into aa values(null);
sqlite> insert into aa values(null);
sqlite> insert into aa values(null);
sqlite> insert into aa values(null);
sqlite> select * from aa;
1
2
3
4
5
sqlite> create table bb(id int references aa on delete cascade, content text);
sqlite> insert into bb values (2,'aaaaaaa');
sqlite> insert into bb values (2,'aaaaaaa');
sqlite> insert into bb values (2,'aaaaaaa');
sqlite> select * from bb;
2|aaaaaaa
2|aaaaaaa
2|aaaaaaa
sqlite> pragma foreign_keys=on;
sqlite> delete from aa where id=2;
sqlite> select * from aa;
1
3
4
5
sqlite> select * from bb;
sqlite>

要手动启动sqlite的外键约束

删除aa表中的id=2的行后,bb表就空了!测试成功。

-- EOF --

本文链接:https://www.pynote.net/archives/3046

留言区

电子邮件地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top