|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
因此,我们的第一个“米”,就是二进制日志binlog必须是rowbased的。在rowbase下,二进制日志binlog同时记录了更新前后的整行记录。触发器|技能|计划
触发器计划技能与实例
在数据库计划中,有两种办法可设定主动化的材料处置划定规矩,一种是前提束缚,
一种是触发器,一样平常而言,前提束缚比触发器较简单设定及保护,且实行效力较
好,但前提束缚只能对材料举行复杂的栏位检点,当触及到多表操纵等庞大操
作时,就要用到触发器了.
一个数据库体系中有两个假造表用于存储在表中纪录修改的信息,分离
是:
假造表Inserted假造表Deleted
在表纪录新增时寄存新增的纪录不存储纪录
修正时寄存用来更新的新纪录寄存更新前的纪录
删除时不存储纪录寄存被删除的纪录
触发器的品种及触发机会
After触发器:触发机会在材料已变化完成后,它将对变化材料举行需要的
善后与处置,若发明有毛病,则用事件回滚(RollbackTransaction)
将此次操纵所更动的材料全体复兴。
Isteadof触发器:触发机会在材料变化前产生,且材料怎样变化取决于触发器
如今先容一下创立触发器的编写格局:
After范例:
CreateTrigger触发器称号
on表名
after操纵(insert,update)
as
Sql语句
Instead范例
CreateTrigger触发器称号
on表名
Insteadof操纵(update,delete)
as
Sql语句
实例1:
在定单(表orders)中的订购数目(列名为num)有变化时,触发器会先到客户(表Customer)中
获得该用户的信誉品级(列名为Level),然后再到信誉额度(Creit)中掏出该品级
允许的订购数目高低限,最初对照定单中的订购数目是不是切合限定。
代码:
CreateTriggernum_check
onorders
afterinsert,update
as
ifupdate(num)
begin
ifexists(selecta.*fromordersajoincustomerbona.customerid=b.customerid
joincreitconb.level=c.level
wherea.numbetweenc.upandc.down)
begin
rollbacktransaction
execmaster..xp_sendmailadministrator,客户的订购数目不切合限定
end
end
实例2:
有人为办理体系中,当公司对某员工甲的月薪举行调剂时,一般会先在表员工中修正薪资列,然后在
表员工纪录中修正薪资调剂工夫与薪资
Createtriggercompensation
on员工
afterupdate
as
if@@rowcount=0return
ifupdate(薪资)
begin
insert员工纪录
select员工遍号,薪资,getdate()
frominserted
end
先说DDL的分类。有一类DDL,是不需要重建表的,比如加非聚簇索引。这类操作其实不会丢数据,也是在原表上直接操作,对于我们“以恢复数据为目的”的闪回,是可以先忽略的。另外一类,则是会影响到表数据的操作。 |
|