最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

数据库后台优化触发器

来源:懂视网 责编:小采 时间:2020-11-09 15:02:28
文档

数据库后台优化触发器

数据库后台优化触发器:为了保证数据库的完整性和一致性,很多的时候需要执行多条sql语句才能达到想要的目的。 在一对多的数据库关系中,比如卡号类别与卡号之间的关系。如果要取消某个类别的时候,就要连同齐下的所有卡号都删除。在现实中,注册的时候一般都会进行充值,当我想ca
推荐度:
导读数据库后台优化触发器:为了保证数据库的完整性和一致性,很多的时候需要执行多条sql语句才能达到想要的目的。 在一对多的数据库关系中,比如卡号类别与卡号之间的关系。如果要取消某个类别的时候,就要连同齐下的所有卡号都删除。在现实中,注册的时候一般都会进行充值,当我想ca

为了保证数据库的完整性和一致性,很多的时候需要执行多条sql语句才能达到想要的目的。 在一对多的数据库关系中,比如卡号类别与卡号之间的关系。如果要取消某个类别的时候,就要连同齐下的所有卡号都删除。在现实中,注册的时候一般都会进行充值,当我想car

为了保证数据库的完整性和一致性,很多的时候需要执行多条sql语句才能达到想要的目的。

在一对多的数据库关系中,比如卡号类别与卡号之间的关系。如果要取消某个类别的时候,就要连同齐下的所有卡号都删除。在现实中,注册的时候一般都会进行充值,当我想card表里面写东西的时候,就要向recharge表里面写一条充值记录。完成这两个操作才算完成这个功能的实现.

对于以上的需求,每个功能的实现都伴随着多条sql语句的执行。

为了解决上面的问题,一共有两种解决方法。一是存储过程,二是触发器。上篇博客中已经讲解了存储过程。那么这篇博客当然要来详解一下触发器了。

触发器:当发生某个操作之后进行的一系列操作。

数据库中除了查询之外就只有增删改三种操作了。所以触发器就分为三类:insert、delete、update三种触发器。

\

下面来看一下实例:

这是我创建的数据库两张表:(T_card和T_type,并且两张表设置了主键和外键约束)

\

下面是我执行删除‘临时用户’所执行的结果。(这是因为外键约束造成的错误)

\

之后我再创建delete触发器,看一下是否可以实现目的。

CREATE TRIGGER delType 
 ON T_type
 AFTER delete
AS 
BEGIN
	declare @typeId int
	delete T_card where typeid in (select typeid from deleted) --从已经删除的表中 取出typeId
END
GO

执行结果与上述错误相同。

在来看一下sql server中创建触发器的定义模版:

\

大家注意到alter了没有,insert delete update这三种触发器都是在完成操作之后再执行之后的一系列sql语句。如果这触发器的条件执行出错,那么后面的操作就都没有办法执行了。

因此,大家正在想。如果我先删除 ‘临时用户’的卡号,在来删除卡号类别,这样错误不就没有了吗。

\

要找一系列操作来替代delete方法。

alter TRIGGER delType 
 ON T_type
 instead of delete
AS 
BEGIN
	declare @typeId int
	select @typeId=typeid from deleted --从打算删除的表中 取出typeId :还没有删除
	delete T_card where typeid in (select typeid from deleted) --先删除卡类别对应的卡号
	delete T_type where typeid=@typeid	--在删除卡号类别
END
GO

之后再执行sql语句看效果:

\

\

达到了想要的效果。在删除了临时用户这个类别和临时用户的卡号。

可以使用触发器的需求:当对某张表进行增删改等操作的时候,需要对其他表进行一系列的操作。

使用触发器,可以保证数据库的完整性。存储过程和触发器的编写。可以减少程序的代码,降低难度。同时也是为了减少重复代码。对于一个系统来说,如果没有使用触发器和存储过程等方法。那么代码的编写,重复量将是很可怕的。相反,如果设计好数据库,写好存储过程和触发器等。在来看这个系统,那真是简单多了。

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

数据库后台优化触发器

数据库后台优化触发器:为了保证数据库的完整性和一致性,很多的时候需要执行多条sql语句才能达到想要的目的。 在一对多的数据库关系中,比如卡号类别与卡号之间的关系。如果要取消某个类别的时候,就要连同齐下的所有卡号都删除。在现实中,注册的时候一般都会进行充值,当我想ca
推荐度:
标签: 数据 保证 数据库
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top