我是靠谱客的博主 震动奇迹,最近开发中收集的这篇文章主要介绍MYSQL触发器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

什么是触发器?

触发器定义了一系列操作,这一系列操作称为触发程序,当触发事件发生时,触发程序会自动运行。触发器主要用于监视某个表的insert、update以及delete等更新操作,这些操作分别激活该表不同类型的触发程序运行,从而实现数据的自动维护。

创建触发器

语法格式:
create trigger 触发器名 触发时间 触发事件 on 表名 for each row
begin
触发程序
end;

注:
1.触发器是数据库的对象,因此需要指定该触发器隶属于哪个数据库。
2.触发器基于表(严格说是基于表的记录),这里的表是基表,不是临时表,不是视图。
3.触发时间有两种:before和after。
4.触发事件有3种:insert、update、delete。
5.同一个表不能创建两个相同触发时间、触发事件的触发程序。
6.for each row表示行级触发。
7.触发程序中的select语句不能产生结果集。
8.触发程序中可以使用old关键字与new关键字。
(当需要访问新记录的某个字段值时,可使用“new.字段名”的方式访问。)
9.old记录是只读的,可以引用它,但不能更改它。

举个栗子:
info表内容如图,当status=1时,展示在页面上。执行删除操作时,将status置为0,此时并没有真正删除数据,只是不将其展示在页面上。
info表
当管理员向该表中插入数据时,应先检查该表是否存在该数据。若存在,只需将status=1,不存在就插入该数据。

use myclass;   

DROP TRIGGER IF EXISTS t_info;
DELIMITER !!
CREATE TRIGGER t_info BEFORE INSERT ON info_copy FOR EACH ROW   #触发器不可向基表插入数据,所以此处将其他表作为基表
BEGIN
  DECLARE idnum TINYINT;
  DECLARE idnum2 TINYINT;
  SELECT count(*) as cou into idnum from info where  idcard=new.idcard and status=0; 
  SELECT count(*) as cou2 into idnum2 from info where  idcard=new.idcard and status=1;   
	IF idnum>=1 THEN   #存在且状态为0
		UPDATE info set status=1 where idcard=new.idcard; 
    ELSEIF idnum2<=0 THEN    #不存在
	   INSERT INTO info (name,sex,idcard,status) VALUE (new.name,new.sex,new.idcard,1); 
    END IF;
END 
!!
DELIMITER ;

当我们向info_copy表插入数据时,我们检测的时info表是否存在符合的数据。当我们向info_copy表插入存在的数据时:

insert into info_copy(name,sex,idcard) values('weiu','男','510106198908246561');


当我们向info_copy表插入不存在数据时:

insert into info_copy(name,sex,idcard) values('ruiu','女','510106198809246461');


此过程会造成冗余数据,可通过事件调度器对info_copy表进行定期清理。

查看触发器的定义

1.查看当前数据库中所有触发器的信息:show triggers;

2.查看某个触发器的定义:show create trigger t_info;

3.MySQL中所有触发器的定义都存放在information_schema数据库下的triggers表中,查看triggers表时,可查看数据库中所有触发器的详细信息。
select * from information_schema.triggers;

删除触发器

drop trigger 触发器名;

触发器的优缺点

优点:灵活方便
缺点:比较耗费资源,效率低于存储过程,定位缺陷相对困难。

最后

以上就是震动奇迹为你收集整理的MYSQL触发器的全部内容,希望文章能够帮你解决MYSQL触发器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部