SQL创建触发器以及触发器的使用实例+详解

MySQL的触发器使用实例:

解决   触发器被触发后,向表里插入数据时判断该条记录是否存在,如果存在则更新,不存在则插入 的问题

首先声明一下 mysql  中写的sql执行语句全部在  begin     end;  之间。写在begin end;外面的sql语句无法执行。

用简单的手动建表的办法,创建两个表。我用这两个表来介绍触发器该怎么使用。

操作表(触发器所在的表):  table                 执行表(相应触发器的表):   table1                 

删除触发器(delete) : 在 table 表中删除一条数据的时候,删除触发器(delete)被触发,它需要在 table1 表中插入主键,以及其它字段属性,    因为两个表的主键是一致的,所以 在 table1 中插入数据的时候,如果 已经有主键了,那么就会出现无法插入的动作,所以我们需要判断 table1 表中是否已经有该主键,如果有那么只进行字段的更新,如果没有再进行插入动作。 

SQL判断 语句在触发器中的实现:  定义的 id 是主键

BEGIN
  -- SQL语句 定义变量
  SET @id=OLD.id,@name=OLD.name,@image=OLD.image,@A=0;  --在触发器中定义接收变量,用@标识接收变量。  

   if (SELECT COUNT(*) AS nums FROM table1 WHERE id=old.id)=0  --判断table1中是否有table表传过来相同的主键。
   then
--如果table1中没有与传过来相同的主键,那么插入这条数据
    insert into table1(id,name,image,bz) values(@id,@name,MD5(@id+@name),@A);

  else
--如果table1中有相同的主键,那么更新这条数据。
    update table1 set name = @name,image=MD5(@id+@name),bz=@A  where id = old.id;
--结束判断
    end if;

END;

MD5(消息摘要算法): 在触发器中是一个负责加密的函数,就好像指纹锁一样,相同的两个数据 用MD5加密 的 hash值也是相同的。MD5可以为文件加密。

解释一下  @id=OLD.id ,这里@id 是用来接收 OLD.id 的值, 而OLD.id 表示的是 table 表中数据删除之前的id属性值。

与  OLD  对应的  是 NEW, 如果是  更新触发器 你会用到 NEW 属性, 比如执行更新动作, OLD.id表示的是数据还未更新前的id值,而 NEW.id  则表示的是 数据更新后的 id 值。

举一个  更新触发器(update)含NEW的例子:(逻辑跟上面的一致)  还是 定义 id 是主键

BEGIN
SET @A = 2;
  set @id=new.id,@name=new.name;
   if (SELECT COUNT(*) AS nums FROM table1 WHERE id=new.id)=0 then
   insert into table1(id,name,image,bz) values (@id,@name,new.image,@A);
  else
  update table1 set name =@name,image=new.image,bz=@A  where id = @id;
  end if;
END;

 

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值