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

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

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

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

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

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

1、命令行创建

(1)命令格式

本部分转载自:https://www..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

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

最终,我用了java的线程池,定时查询数据库的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值