关于SQL Server级联操作
首先推荐一个SQL Server 基本练习连接:https://www.2cto.com/database/201804/737669.html。
数据库中有三张表:department(部门),major(专业),teacher(老师)
创建三张表:
-- 创建表
-- 创建院系信息表
use stuManage;
create table department(
dNo char(6) primary key, -- 院系号
dName varchar(20) not null, -- 院系名称
dTel varchar(11) -- 院系电话
);
-- 创建专业信息表
create table major(
mNo char(6) primary key, -- 专业号
mName varchar(40) not null, -- 专业名称
mFirSubject varchar(40) not null, -- 一级学科
mSecSubject varchar(40),-- 二级学科
dNo char(6) constraint dNo_fore foreign key references department(dNo) -- 院系编号
);
-- 创建教师信息表
create table teacher(
tNo char(6) primary key, -- 教师号
tName varchar(20) not null,-- 姓名
tSex char(4), -- 性别
tBirth datetime, -- 出生年月
tRank varchar(20) not null, -- 职称
dNo char(6) constraint dNo_teacher_fore foreign key references department(dNo) -- 院系编号
);
2.在表中插入数据:
-- 添加纪录
-- 添加系记录
insert into department(dNo,dName,dTel) values('161','金融数学与统计学院','1234567');
-- 添加专业记录
insert into major(mNo,mName,mFirSubject,mSecSubject,dNo)
values(151612,'信息与计算科学','理科','数理科','161')
,(151611,'金融数学','理科','数理科','161');
-- 添加教师记录
insert into teacher(tNo,tName,tSex,tBirth,tRank,dNo)
values('1','张三三','男','1990-10-10 12:10:00','教授',161),
('2','李四四','女','1950-10-10 12:10:00','教授',161);
3.删除“d01006”号院系及其的所有相关信息。(这时涉及到外键连接,例如更新或删除department表中的dNo)
将所关联的列,先删除外键关联,再添加外键并在外键中添加 ON UPDATE CASCADE ON DELETE CASCADE;
-- 法一,逐个删除,先删除子表再删夫表1
delete
major
where
dNo=
'd01006'
;
delete
teacher
where
dNo=
'd01006'
;
delete
department
where
dNo=
'd01006'
;
-- 法二,建立了级联操作,可以直接删除父表
alter
table
major
drop
constraint
dNo_fore;
alter
table
major
add
constraint
dNo_fore
foreign
key
(dNo)
references
department(dNo)
ON
UPDATE
CASCADE
ON
DELETE
CASCADE
;
alter
table
teacher
drop
constraint
dNo_teacher_fore;
alter
table
teacher
add
constraint
dNo_teacher_fore
foreign
key
(dNo)
references
department(dNo)
ON
UPDATE
CASCADE
ON
DELETE
CASCADE
;
delete
department
where
dNo=
'161'
;