概述
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;
最后
以上就是外向砖头为你收集整理的SQL创建触发器以及触发器的使用实例+详解的全部内容,希望文章能够帮你解决SQL创建触发器以及触发器的使用实例+详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复