概述
通过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
-------------------------------------------------------------------------------------------------------------
最终,我用了java的线程池,定时查询数据库的结果。
最后
以上就是阔达小熊猫为你收集整理的【mysql基础知识】数据库中新建触发器,监控数据变化的全部内容,希望文章能够帮你解决【mysql基础知识】数据库中新建触发器,监控数据变化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复