mysql触发器识别增删改_在一个触发器里面如何判断触发器的增删改操作

当一个触发器里面同时存在insert,update,delete时,如何按照不同的操作而触发不同的触发器呢?

但是在效率上没有分开写三个触发器好 ,看不同的需求吧!

如有A、B两表。B表中记录取自A表

A:

ID(PK),     Name,     Sex,     Job,     Address

B:

ID(PK),     Name,     Address

代码如下:

create   trigger   tr_insert_update_delete_A   on   A

for   insert,update,delete

as

if   not   exists(select   *   from   deleted)   --如果是新增

insert   B(Name,Address)   select   Name,Address   from   inserted

else   if   not   exists(select   *   from   inserted)   --如果是删除

delete   B   from   deleted   d   where   B.Name=d.Name

else  if(select count(*) from deleted)>0 and (select count(*) from inserted)>0     --如果是更新

update   B   set   Name=i.Name,Address=i.Address

from   B,inserted   i,deleted   d

where   i.Name=d.Name   and   i.Name=b.Name

注意在逻辑虚拟表deleted和inserted在执行批量操作时是多个记录同时存在而不是一条条的循环执行!

自定义错误消息: raiserror( '不允许同时更新多条记录的主键值,更新被取消! ',1,16)

示例使用 isnumeric 返回所有非数值的数据行。

select * from CDS_Guest

where isnumeric(name)=0;

go

示例使用 isdate 测试某一字符串是否是有效的 datetime。

if isdate('2009-05-12 10:19:41.177')=0

print '有效的日期'

else

print '无效的日期'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值