公司开早会,今天分享sqlserver触发器,发上来也给大家瞅瞅。
?
触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器一般用在check约束更加复杂的约束上面。触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作。诸如:update、insert、delete这些操作的时候,系统会自动调用执行该表上对应的触发器。SQL Server 2005中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有create、alter、drop语句。DML触发器分为:
a、 insert触发器
b、 update触发器
c、 delete触发器
主要研究了一下DML触发器
鄙人总结如下:
1.触发器主要是通过事件进行触发被自动调用执行的 2.触发器是一个特殊的存储过程,但和存储过程的调用方式不同。(事件触发) 3.常见的触发器有三种:分别应用于Insert,Update,Delete 事件。 4.一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息 分别是:虚拟表Inserted和虚拟表Deleted Deleted 与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”
创建触发器: CREATE TRIGGER triggerName??--触发器名字 ON table????????????????????--对哪个表创建触发器 FOR update/delete/insert????--因什么事件触发 AS BEGIN ????????????????????????????--事件触发后要做的事情 例如:对与主表关联的表的相关信息进行同步更新 END
献上鄙人找到的最通俗理解触发器原理及作用的一个小事例: 我们为什么要使用触发器?比如,这么两个表 eg: ??????Create Table Student??????????????--学生表
??????(???
????????StudentID int primary key,???????--学号 ????????.... ???????) ? ??????Create Table BorrowRecord?????????????????--学生借书记录表
?????(????????????? ????????BorrowRecord???int identity(1,1),???????--流水号?? ????????StudentID??????int,????????????????????--学号 ????????BorrowDate?????datetime,????????????????--借出时间 ????????ReturnDAte?????Datetime,????????????????--归还时间 ????????... ??????) ? ?????用到的功能有: ????????1.如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号); ????????2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录,等等。 ? ?????这时候可以用到触发器。对于1,创建一个Update触发器: ? ?????Create Trigger truStudent ???????On Student?????????????????????????--在Student表中创建触发器 ???????for Update?????????????????????????--为什么事件触发 ?????As????????????????????????? |