Heim > Datenbank > MySQL-Tutorial > 数据库后台优化触发器

数据库后台优化触发器

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-06-07 15:58:05
Original
1368 Leute haben es durchsucht

为了保证数据库的完整性和一致性,很多的时候需要执行多条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
Nach dem Login kopieren

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

在来看一下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 <a target=_blank href="mailto:typeid=@typeid		">typeid=@typeid		</a>--在删除卡号类别
END
GO
Nach dem Login kopieren

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

\

\

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

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

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

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage