关于SQL Server级联操作

首先推荐一个SQL Server 基本练习连接:https://www.2cto.com/database/201804/737669.html

数据库中有三张表:department(部门),major(专业),teacher(老师)

关于SQL Server级联操作

创建三张表:

-- 创建表
-- 创建院系信息表
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';