好记性不如烂笔头,生活、学习、工作、感悟,记于“笔下”,留于心间。任时光荏苒、世易时移,唯文字不改、记忆不散。

by:蚂蹄儿

在sqlite中如何启用级联删除?

分类:学无止境 - sqlite

关键词: sqlite  级联删除 

来源:蚂蹄儿(www.motyer.cn)

阅读:1发布时间:

  新建表Class和表Student,SQL语句如下:

create table Class (
	C_No varchar(5) primary key,
	C_Name varchar(200) not null,
	C_Location varchar(200) not null
);

create table Student (
	S_No varchar(10) primary key,
	S_Name varchar(10) not null,
	S_Sex bit not null,
	S_C_No varchar(5),
	foreign key(S_C_No) references Class(C_No) on delete cascade
);


  在表Student中有一个外键S_C_No关联到表Class的主键C_No。下面为两张表增加几条记录,如下表:

表Class

C_NO 

C_Name 

C_Location 

 00001

软工01班 

 J001

00002 

软工02班 

J002 

表Student

S_No 

S_Name 

S_Sex 

S_C_No 

 1205100101

张三 

 00001

 1205100128

 李四

 00001

 1205100216

 韩梅梅

 00002


  此时,如果删除表Class中C_No为00002的数据:

delete from [Class] where [C_No] = '00002';


  会发现,只有该条数据被删除,而表Student中数据为发生任何变化。回顾我们的步骤发现没有错误的地方,那么为什么这么操作无效呢?

  原来,sqlite中级联删除默认是关闭的,需要在使用级联删除的时候启动,启动级联删除的方法如下:

pragma foreign_keys = 0;


  知道上述方法后,再执行下面的SQL语句:

pragma foreign_keys = 0;
delete from [Class] where [C_No] = '00001';


  就能正常的在删除Class表中C_No为00001的数据的同时,一并删除表Student中S_C_No为00001的所有数据。


  桌面软件定制、中小型网站建设、移动APP开发请联系QQ/微信:773347113。


上一篇:

下一篇: