十年河东,十年河西,莫欺少年穷

本篇主旨是如何物理删除有主外键约束的记录!那么,我们从主外键走起!

下面新建三张有主外键约束的表,分别为:系/学院表,专业班表,学生表,如下:

CREATE TABLE Dept--系/学院表
(
DeptId int identity(1,1) primary key,
DeptName nvarchar(50),--系名称
AddTime datetime default(getdate())
) CREATE TABLE Grade--班级表
(
GradeId int identity(1,1) primary key,
DeptId int FOREIGN KEY REFERENCES Dept(DeptId),
GradeNum varchar(50) unique,--专业班编号
GradeName nvarchar(50),--专业名称
AddTime datetime default(getdate())
) CREATE TABLE Student
(
StudentId int identity(1,1) primary key,
GradeId int FOREIGN KEY REFERENCES Grade(GradeId),
StudentName nvarchar(50),--学生姓名
SudentSex nvarchar(1) default('男'),
)

由上述SQL脚本,我们可以得到:学生表外键于班级表、班级表外键于系/学院表。也就是说:系和班级是1:N 的关系,同理班级和学生也是1:N 的关系。

上述的主外键很清晰!

下面我们新增记录,如下:

由上图,我们可以看出计算机系下,有计算机网络、计算机科学与技术两个专业班。计算机网络、计算机科学与技术两个班级均有两个学生!

现在我们有如下需求:

删除计算机系~

因为有外键约束,所以当我们删除时,会发现删除失败!

而这时我们要做的是:先删除学生表、再删除班级表、最后删除系/学院表。

有了以上思路,我们就可以写存储过程了!

存储过程如下:

create proc DeleteDeptProc
(
@DeptId int,
@IsSuccess bit=0 output
)
as
begin
delete from [dbo].[Student] where GradeId in (select GradeId from [dbo].[Grade] where DeptId=@DeptId)
delete from [dbo].[Grade] where DeptId=@DeptId
delete from [dbo].[Dept] where DeptId=@DeptId
set @IsSuccess=1
end --执行上述存储过程
DECLARE
@DeptId int,
@IsSuccess bit
SET @DeptId = 1;
exec DeleteDeptProc @DeptId,@IsSuccess

执行结果如下(输出参数可以在程序中判断执行是否成功~嘻嘻~):

从上图看出,可以一次性删除完成!

之所以采用存储过程是因为存储过程的特性:要么做,要么不做!这样就保证了数据的完整性!

当然,本节使用存储过程实现的,大家也可以采用SQL的触发器实现,使用触发器实现是基于级联删除!这个大家自行查询资料!

 @陈卧龙的博客

C# 如何物理删除有主外键约束的记录?存储过程实现的更多相关文章

  1. 批量删除MSSQL 中主外键约束

    转自: http://www.maomao365.com/?p=813 在制作 MSSQL同步工具的时候,发现由于主外键的约束,导致数据同步异常,所有我们需要把 读数据库里面的主外键约束,进行批量删除 ...

  2. Oracle开发 之 主-外键约束FK及约束的修改

    试验环境: 1)数据库版本:oracle 11.2.0.4 2)建表脚本:以scott的dept及emp表为基础. 父表:dept -- Create table create table DEPT ...

  3. 【SQL Server DBA】维护语句:删除并创建外键约束、获取建表语句

    原文:[SQL Server DBA]维护语句:删除并创建外键约束.获取建表语句 1.删除外键约束,建立外键约束 先建立3个表: /* drop table tb drop table tb_b dr ...

  4. MySQL 主外键约束与标准SQL不同的地方

    [标准SQL的外键约束条件] 1): 子表引用父表的主键 drop table if exists child,parent; create table if not exists parent( i ...

  5. SQL server 添加主外键约束

    ---添加主键约束   alter table 表名 add constraint 约束名 primary key (主键)          - --添加唯一约束   alter table 表名 ...

  6. oracle 查看主外键约束

    select a.constraint_name, a.table_name, b.constraint_name from user_constraints a, user_constraints ...

  7. sql数据库删除表的外键约束(INSERT 语句与 FOREIGN KEY 约束"XXX"冲突。该冲突发生于数据库"XXX",表"XXX", column 'XXX)

    使用如下SQL语句查询出表中外键约束名称: 1 select name 2 from sys.foreign_key_columns f join sys.objects o on f.constra ...

  8. 通过sql命令建表 和 主外键约束以及其他约束

    create table命令 create table dept ( dept_id int primary key, dept_name ) not null, dept_address ) ) c ...

  9. SQL级联删除——删除主表同时删除从表——同时删除具有主外键关系的表

    create table a(id  varchar(20) primary key,password varchar(20) not null) create table b(id int iden ...

随机推荐

  1. Python tab键命令补全

    pip install pyreadline import rlcompleter, readline readline.parse_and_bind('tab: complete') root@pe ...

  2. 12、多线程:Threading、守护线程

    线程与进程: 线程对于进程来说,就好似工厂里的工人,分配资源是分配到工厂,工人再去处理. 线程是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属 ...

  3. IDEA 编译 Jmeter 5.0(二次开发)

    windows10 操作系统,jdk1.8,Intellij IDEA 2018,jmeter5.0 1.下载 http://jmeter.apache.org/download_jmeter.cgi ...

  4. 使用zip压缩文件夹方法

    最近使用MapGis对.MPJ工程文件文件裁剪后,要对裁剪后的图形文件.ML,.MT,.MP,.MPJ文件打包,在网上找到7zip,Zlib的库,虽然都有源码,但是Zlib库中的使用没找到文件压缩的函 ...

  5. Linux读写执行权限对目录和文件的影响

    提示:这里的用户指的是普通用户 读写执行权限对root无效 对于目录来说 1)只拥有读权限 可以ls 查看目录内容,不能切换进目录中去 也不能创建目录或文件 [support@node1 opt]$ ...

  6. orcale 使用创建日期排序然后分页每次取排序后的固定条数

    需求: 一个使用mybatis分页插件的分页列表, 现在要求新增一条数据或者修改一条数据后,显示在最前端 思路: 使用sql , 先将查询出来的数据排序, 然后使用rownum > page*s ...

  7. 使用requests模块保存网络上的图片

    import requests url = 'https://www.baidu.com/img/bd_logo1.png' r = requests.get(url=url) with open(' ...

  8. 深入理解Java的堆内存和线程内存

    我们都知道Java对象都是在堆中创建的(开启逃逸分析的情况除外),比如一个线程中有一段这样的代码: public class A{ public int xxx; } 通过A a = new A(); ...

  9. Highcharts属性与Y轴数据值刻度显示Y轴最小最大值

    Highcharts 官网:https://www.hcharts.cn/demo/highcharts Highcharts API文档:https://api.hcharts.cn/highcha ...

  10. C#异步编程のawait和async关键字来写异步程序

    一.await和async关键字 .Net平台不断推出了新的异步编程模型,在.net4.5中加入了关键字await和async,顾名思义,await是指方法执行可等待,即可挂起直到有结果(不是必须立即 ...