分享

数据库教程-SQL Server多表级联操作

 xxcc140 2019-12-16

数据库多表级联操作

在实际数据表操作过程中,我们需要注意数据表数据的完整性,尤其是在存在关联关系的多个表操作过程中,一个表中数据发生变化必然会影响到相关表数据的改变。这也是我们在设计开发数据库过程中所需注意的问题。本文主要针对多表数据操作所面临的问题给出可行的解决方案措施。


问题引入

数据表的完整性要求是数据库设计的基本要求之一,举例如下:

假设创建一个学生信息管理的数据库,该数据库中包含存储学生基本信息的数据表、学生成绩信息表等相关表。如当某一位同学退学之后,需要从学生基本信息表中删除该生的基本信息。删除该生基本信息的同时需要将学生成绩信息等同时删除,目的就是保证数据完整性。在实际设计该数据库时我们可以通过设置外键依赖关系,避免出现这一问题。只允许用户先删除学生成绩信息,再删除基本信息。但这种方法人机交互体验效果相对较差。数据表结构示例如下:

数据库教程-SQL Server多表级联操作

学生信息与学生成绩表关系

学生成绩表中的数据依赖于学生基本信息表,简单说如果学生退学删除了基本信息,则成绩表中数据也是无意义的数据了。因此再执行学生基本信息删除过程中需要自动去删除学生成绩信息,即所谓的级联操作。另外在库存管理数据库中,一般存在库存表与销售、采购数据表。采购、销售信息的录入将会导致库存信息的变化,因此也存在级联关系。即采购与销售会影响到库存表中的数据。三表之间关系如下所示:

数据库教程-SQL Server多表级联操作

库存信息的多表级联关系

综上所述在多表存在关系时,无论是删除、更新、插入等操作,都需要涉及其他表数据变动。这一变动决定了相关表中数据的一致性。触发器是实现自动级联操作的有效方法之一。


触发器基本知识

触发器(Trigger)是SQL Server基本对象之一,也是绝大多数关系型数据管理系统的基本功能对象之一,触发器的目的主要用于保证数据的完整性。顾名思义,因触发而执行的操作,其触发是有条件的,如在执行增删改查之前触发,还是执行增删改查操作之后触发。本文以SQL Server Trigger为例对触发器基本知识进行说明。首先给出触发器定义的语法:

数据库教程-SQL Server多表级联操作

SQL Server Trigger基本语法

触发器基本语法描述如上所示,其中FOR与AFTER触发器在delete、insert、update之后执行,INSTEAD OF在delete、insert、update之前执行。SQL Server 在执行触发器的过程中会生成两张临时表用于存储删除的数据及添加的数据,两表名字分别为Deleted与Inserted。由于本例重点说明表的级联操作,对触发器部分知识点不再一一介绍,有兴趣读者可自行查阅相关内容。


实例分析

描述:创建电脑库销售管理数据库,设计电脑库存表、采购表、销售表用于实现对电脑库存信息,销售信息、采购信息等进行存储。要求该数据库能够实现自动在采购、销售记录实现自动更新库存表中的数据。

1、基本数据表创建

本例创建数据表包括电脑基本信息表com_infor,采购表Buy_infor,销售表Sell_infor。其中采购表、销售表与电脑基本信息表存在外键依赖关系。各表结构描述如下:

数据库教程-SQL Server多表级联操作

电脑基本信息表结构与数据类型

数据库教程-SQL Server多表级联操作

电脑采购表结构与数据类型

数据库教程-SQL Server多表级联操作

电脑销售表结构与数据类型

2、销售登记关联操作

销售表填写数据时,需要自动查询库存信息,如果库存满足要求,则执行销售操作并更新电脑信息表中的库存字段值,否则给出提示信息,不允许操作执行。

数据库教程-SQL Server多表级联操作

销售insert操作关联触发器

3、采购登记关联操作

在采购信息登记时,需要检查库电脑信息表,如存在该商品则更新库存数量字段,并完成采购登记,如检查为空,则将新电脑信息写入电脑信息表中。

数据库教程-SQL Server多表级联操作

insert操作触发器

insert触发器定义如上图,在对Buy_Infor表执行插入操作时,会自动检查Com_Inofr表,如存在该编号笔记本则更新数量,不存在则写入新电脑信息,完成之后再将数据写入Buy_Infor表。

4、删除商品关联操作

在删除Com_Infor表中记录时,由于存在外键约束,会提示违反外键约束错误信息,为避免违反外键,需要在执行删除时,首先删除对应采购表与销售表中同一编号记录信息。因此需要使用instead类型触发器在删除前进行检查,实现代码如下:

数据库教程-SQL Server多表级联操作

删除电脑基本信息触发操作

以上给出通过使用触发器实现关联多表之间的级联操作,在各表进行增删改操作时,可定义不同触发器实现级联操作,以此保证数据的一致性。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多