这篇文章主要介绍了MySQL触发器运用于迁移和同步数据的实例教程,分别是SQL Server数据迁移至MySQL以及同步备份数据表记录的两个例子,需要的朋友可以参考下

1.迁移数据进行数据库移植,SQL Server=>MySQL。SQL Server上有如下的Trigger

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_NULLS ON

GO

ALTER TRIGGER [trg_risks] ON dbo.projectrisk

FOR INSERT, UPDATE

AS

BEGIN

UPDATE projectrisk

SET classification =

case

when calc>= 9 then 3

when calc <9 and calc>=4 then 2

when calc <4 then 1

end

from (select inserted.id, inserted.possibility*inserted.severity as calc from inserted) as T1

where projectrisk.id = T1.id

END

GO

SET QUOTED_IDENTIFIER OFF

GO

SET ANSI_NULLS ON

GO

简单了解了下MySQL中,Trigger的语法。

# 创建

CREATE TRIGGER

{ BEFORE | AFTER }

{ INSERT | UPDATE | DELETE }

ON

FOR EACH ROW

# 删除

DROP TRIGGER

注:创建触发器需要CREATE TRIGGER权限。(HeidiSQL中执行Trigger语句会有bug)

由于MySQL中的每个触发器只能针对一个动作,所以本次移植就需要创建两个触发器。对于发生变更的行,在触发器中可以用 NEW 来代替。

下边的触发器有什么问题吗?

delimiter &&

CREATE TRIGGER trg_risks_insert

AFTER INSERT ON `projectrisk`

FOR EACH ROW

UPDATE projectrisk SET classification = CASE

WHEN possibility*severity>=9 THEN 3

WHEN possibility*severity <9 AND possibility*severity>=4 THEN 2

WHEN possibility*severity <4 THEN 1

END

WHERE id = new.id;

&&

CREATE TRIGGER trg_risks_update

AFTER UPDATE ON `projectrisk`

FOR EACH ROW

UPDATE projectrisk SET classification = CASE

WHEN possibility*severity>=9 THEN 3

WHEN possibility*severity <9 AND possibility*severity>=4 THEN 2

WHEN possibility*severity <4 THEN 1

END

WHERE id = new.id;

&&

delimiter ;

问题就是,没有考虑到触发器中的修改也会触发触发器,进入了死循环。做了如下修改后,终于OK了。

delimiter &&

CREATE TRIGGER trg_risks_insert

BEFORE INSERT ON `projectrisk`

FOR EACH ROW

BEGIN

SET new.classification = CASE

WHEN new.possibility*new.severity>=9 THEN 3

WHEN new.possibility*new.severity <9 AND new.possibility*new.severity>=4 THEN 2

WHEN new.possibility*new.severity <4 THEN 1

END;

END

&&

CREATE TRIGGER trg_risks_update

BEFORE UPDATE ON `projectrisk`

FOR EACH ROW

BEGIN

SET new.classification = CASE

WHEN new.possibility*new.severity>=9 THEN 3

WHEN new.possibility*new.severity <9 AND new.possibility*new.severity>=4 THEN 2

WHEN new.possibility*new.severity <4 THEN 1

END;

END

&&

delimiter ;

2.同步备份数据记录表添加记录到新记录表

DELIMITER $$

USE `DB_Test`$$

CREATE

/*!50017 DEFINER = 'root'@'%' */

TRIGGER `InsertOPM_Alarm_trigger` BEFORE INSERT ON `OPM_Alarm`

FOR EACH ROW BEGIN

INSERT INTO OPM_Alarm_copy (AlarmId,AlarmCode,AlarmTypeId,AlarmLevelId,AlarmObjectCode,AlarmStatus,AlarmHandleUser,

AlarmHandleTime,ADDTIME,ParkUserId,BerthCode,BargainOrderCode,BerthStartTime)

VALUES(new.AlarmId,new.AlarmCode,new.AlarmTypeId,new.AlarmLevelId,new.AlarmObjectCode,new.AlarmStatus,new.AlarmHandleUser,

new.AlarmHandleTime,new.ADDTIME,new.ParkUserId,new.BerthCode,new.BargainOrderCode,new.BerthStartTime);

END;

$$

DELIMITER ;

CREATE TRIGGER InsertOPM_Alarm_trigger

BEFORE INSERT ON OPM_Alarm

FOR EACH ROW

BEGIN

INSERT INTO OPM_Alarm_copy (AlarmId,AlarmCode,AlarmTypeId,AlarmLevelId,AlarmObjectCode,AlarmStatus,AlarmHandleUser,

AlarmHandleTime,ADDTIME,ParkUserId,BerthCode,BargainOrderCode,BerthStartTime)

VALUES(new.AlarmId,new.AlarmCode,new.AlarmTypeId,new.AlarmLevelId,new.AlarmObjectCode,new.AlarmStatus,new.AlarmHandleUser,

new.AlarmHandleTime,new.ADDTIME,new.ParkUserId,new.BerthCode,new.BargainOrderCode,new.BerthStartTime);

END ;

mysql触发器监控mysql数据表记录删除操作 DELIMITER $$

USE `DB_Test`$$

DROP TRIGGER /*!50032 IF EXISTS */ `SYS_OPM_trigger`$$

CREATE

/*!50017 DEFINER = 'root'@'%' */

TRIGGER `SYS_OPM_trigger` AFTER DELETE ON `OPM_Alarm`

FOR EACH ROW BEGIN

DECLARE str VARCHAR(40000);

SET str=CONCAT(old.AlarmId,'@',old.AlarmCode,'@',old.AlarmTypeId,'@',old.AlarmLevelId,'@',

old.AlarmObjectCode,'@',old.AlarmStatus,'@',old.AlarmHandleUser,'@',old.AlarmHandleTime,'@',

old.AddTime,'@',old.ParkUserId,'@',old.BerthCode,'@',old.BargainOrderCode,'@',old.BerthStartTime);

INSERT INTO OPM_AlarmAction_log(UserName,Client_IP,Delete_before_key,Delete_Date)

VALUES(SUBSTRING_INDEX(USER(),'@',1),SUBSTRING_INDEX(USER(),'@',-1), str, NOW());

END;

$$

DELIMITER ;

删除前 添加原记录备份到另一记录表

DELIMITER $$

USE `DB_Test`$$

DROP TRIGGER /*!50032 IF EXISTS */ `InsertOPM_Alarm_trigger`$$

CREATE

/*!50017 DEFINER = 'root'@'%' */

TRIGGER `InsertOPM_Alarm_trigger` BEFORE

DELETE ON `OPM_Alarm`

FOR EACH ROW BEGIN

INSERT INTO OPM_Alarm_copy

(AlarmId,AlarmCode,AlarmTypeId,AlarmLevelId,AlarmObjectCode,AlarmStatus,AlarmHandleUser,

AlarmHandleTime,ADDTIME,ParkUserId,BerthCode,BargainOrderCode,BerthStartTime)

VALUES

(old.AlarmId,old.AlarmCode,old.AlarmTypeId,old.AlarmLevelId,old.AlarmObjectCode,old.AlarmS

tatus,old.AlarmHandleUser,

old.AlarmHandleTime,old.ADDTIME,old.ParkUserId,old.BerthCode,old.BargainOrderCode,old.Bert

hStartTime);

END;

$$

DELIMITER ;

mysql同步 触发器_MySQL触发器运用于迁移和同步数据的实例教程相关推荐

  1. 什么时候使用mysql触发器_MySQL触发器的使用

    1:触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行. 例如:有一个学生表,一个班级表,每当学生添加一个,班级表的人数就增加一个 ...

  2. mysql delete语句_MySQL ------ 触发器(TRIGGER)(二十七)

    MySQL 语句在需要时被执行,存储过程也是,但是你要是想要某条(或某些语句)在事件发生时自动执行,该怎么办触发器由此而来 触发器:某个表发生更改时自动处理.触发器是MySQL响应delete,ins ...

  3. mysql主备数据库配置文档_MySQL数据库配置主从服务器实现双机热备实例教程

    网站:bbs.osyunwei.com 程序在:Web服务器192.168.21.129上面 数据库在:MySQL服务器192.168.21.169上面 实现目的:增加一台MySQL备份服务器(192 ...

  4. mysql同步 触发器_mysql 触发器(数据库的同步)

    1)准备 分别创建数据库test1 test2  以及user_tb 表并初始化一些测试数据 create database test1; create table  test1.user_tb( u ...

  5. 在mysql中怎么写触发器_mysql触发器怎么写

    1.mysql 触发器怎么写 我有books 和 info 表. books表中有 ISBN Allbooks BorrowsBooks info 表有 ISBN Userno Yesorno 当我的 ...

  6. mysql uuid 触发器_mysql触发器uuid

    可以用于生成不重复的id 1.mysql自增长 2.代码雪花算法 3.mysql触发器 数据表代码 CREATE TABLE `product` ( `id` VARCHAR(40) NOT NULL ...

  7. mysql commit慢_mysql autocommit问题导致的gtid同步变慢

    这几天在研究mysql数据同步,查看一些资料发现5.7版本可以使用gtid来实现主备数据库的数据同步. 经过一些折腾,搭建完毕,在master上建库.建表.插入数据,在从库上都能看到.看来一切正常. ...

  8. adg类似于mysql半同步机制_MySQL基准测试异步复制和半同步复制延迟对比

    测试环境 :MySQL 5.7.26 主从异步复制(GTID) 测试数据 :测试数据:10张表,每张表500万行数据,共12G的数据. 每次测试,主实例服务器测试脚本不变,线程为10,复制方式分别为异 ...

  9. mysql本周函数_MySQL的YEARWEEK函数以及查询本周数据_MySQL

    bitsCN.com MySQL的YEARWEEK函数以及查询本周数据 MySQL 的 YEARWEEK 是获取年份和周数的一个函数,函数形式为 YEARWEEK(date[,mode]) 例如 20 ...

  10. mysql列偏移_MySQL:如何对待分布偏移的数据

    --- 作者微信:gp_22389860 --- btr_estimate_n_rows_in_range_low 函数用于非唯一访问的行数评估也就是在执行计划生成阶段会去访问实际的数据,尽可能的得到 ...

最新文章

  1. 工业组态领头羊--组态王开始涉足.net程序开发(与林伟先生一次近距离接触)...
  2. 一招教你掌握肌肉发力的感觉
  3. 利物浦大学图书馆官网西交利物浦大学图书馆官网
  4. [转]让.NET应用秒变微服务
  5. dosbox 伪指令dd为什么会报错_什么是SQL函数?为什么使用SQL函数可能会带来问题?...
  6. android fragment fragmenttransaction,Android FragmentTransaction 常用方法总结
  7. 信息学奥赛一本通(1021:打印字符)
  8. 阿里飞天大数据平台正式亮相:国内最大计算平台
  9. python小测验3_python基础小测试
  10. IIS中防止MDB被下载的办法
  11. php is_subclass_of,PHP is_subclass_of函数的一个BUG和解决方法
  12. Nginx源码分析 - HTTP模块篇 - HTTP模块的初始化(20)
  13. vue跨域使用websocket_在vue中使用SockJS实现webSocket通信的过程
  14. 【个人作品】记之-串口日志记录工具
  15. matlab非参数检验,非参数检验及matlab实现
  16. 基于alphalens对qlib的alpha158做单因子分析
  17. 张飞流水帐(完整版)
  18. log(五)——MDC总结
  19. 欢度春节|领取你的微信专属红包封面-免费送
  20. Python 爬取微博、百度实时热点

热门文章

  1. Python ctypes模块调用API函数, 制作控制电脑其他窗口工具
  2. 彻底卸载SQL2005记录
  3. 关于SRVINSTW与Kernel-Mode Driver Manager
  4. 开发人员学习文档下载地址
  5. 魔兽世界MPQ加载顺序
  6. 使用php制作wap网站
  7. 是德科技N9020A 频谱分析仪技术资料说明
  8. 架构之美-最强卷积神经网络架构设计初想
  9. android zlib 和zip,gzip zip 和zlib
  10. 三款按键可视化软件——在你的电脑屏幕上显示按键