前言
今天整理一下触发器的使用,虽然在项目中,一般都不建议使用触发器,但是我们还是需要了解一下触发器的使用。
正文
触发器的使用。先准备今天要使用的表。创建一个 NewTest表 和 NewTest_log表
#触发器
是一个特殊的存储过程,不是自己调用,而是因为执行某一个操作而自动的触法,就像事件。
使用:监视操作和补充约束。
在前言中,提到一般不建议使用触发器,是因为性能和维护。在实际项目中,一般不容易注意到触发器,给后期的维护会带来一定的困难。
我们对表格数据的所有操作都临时存在这两张表中,“inserted”,“deleted”。我们可以利用这两张临时表进行一些数据的记录,或者业务的约束,修改 等。
下面我们给NewTest表创建一个触发器:
创建这个触发器之后,我们来删除一下表数据 “delete from ADB..NewTest”,再然后查询一下 “select * from ADB..NewTest”,发现这个表里面的数据并没有删除掉。就是因为我们创建的这个触发器,在该表数据删除的时候,就触发新增数据的语句。我们可以利用触发器,来监控表格数据的变化,记录相关的日志。
为NewTest 表创建一个触发器,一旦新增数据,我们就将该数据记录到相关的日志表中:
执行新增语句“INSERT [dbo].[NewTest] ( [Name], [Age], [Gender], [amount]) VALUES ( N'小黄', 18, N'm', 20)”,我们会在“NewTest_log”表中发现也产生了一条记录,可以记录操作时间,操作类型,还有登陆人等等。
那么我们怎么在触发器里面判断,数据是进行了删除,修改,新增操作呐。还是得看两个临时表“inserted”和“deleted”
新增操作:在inserted 表中有数据,deleted 表中无数据。
删除操作:在inserted 表中无数据,deleted 表中有数据。
修改操作:在inserted 表中有数据(新数据),deleted 表中有数据(旧数据)。
我们可以利用这两个临时表中的数据,去判断相应的操作,再去执行我们相应的业务操作
尾声
小可爱们,数据库基础告一段落了,下篇将会记录一下,数据误删除,误修改之后,在无备份的情况下,怎么恢复。
|