【mysql基础知识】数据库中新建触发器,监控数据变化

通过java实时查询数据库好像会影响查询效率,搜索网上资料,说最好使用数据库自己的触发器,用于监控数据库表的变化。

缺点是:触发器在数据库后台执行,维护困难,很有可能被忽略

搜了半天资料,整理如下。

----------------------------------------------------------------------------------------------------------------------------

一、新建触发器(两种方法)

1、命令行创建

(1)命令格式

本部分转载自:https://www.cnblogs.com/CraryPrimitiveMan/p/4206942.html

版本一:

DROP TRIGGER IF EXISTS trigger_name;
CREATE TRIGGER trigger_name
trigger_time
trigger_event ON tbl_name
FOR EACH ROW
trigger_stmt

其中:

trigger_name:标识触发器名称,用户自行指定;
trigger_time:标识触发时机,取值为 BEFORE 或 AFTER;
trigger_event:标识触发事件,取值为 INSERT、UPDATE 或 DELETE;
tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;
trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句。

由此可见,可以建立6种触发器,即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE。

另外有一个限制是不能同时在一个表上建立2个相同类型的触发器,因此在一个表上最多建立6个触发器。

版本二:

create trigger triggerName
after/before insert/update/delete on 表名
for each row   #这句话在mysql是固定的
begin
    sql语句;
end;

............详细内容,见转载原文..............

(2)示例代码(监控某一表格,当某一字段发生变化时,将最新字段添加至另一表中)

DELIMITER $        #指定数据库已$作为语句结束符,而不再默认结束符为;
create TRIGGER request_for_match
AFTER UPDATE on realtime_fueltrs
for EACH ROW
BEGIN
IF new.trsStatus<>old.trsStatus AND new.trsStatus=6 THEN
	UPDATE realtime_match_plate SET nozzleID=new.nozzleID;
END IF;
END; 
DELIMITER;           #还原结束符为; 不然其他语句会出错。

2、navicat 通过界面创建

转载地址:https://jingyan.baidu.com/article/36d6ed1f76ec9e1bcf4883aa.html

二、查看已建触发器

1、命令行查看

SHOW TRIGGERS

2、navicat 通过界面查看

    无

三、删除触发器

drop trigger trigger_name


猜你喜欢

转载自blog.csdn.net/qq_42152399/article/details/80970140
今日推荐