最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL觸發(fā)器運(yùn)用于遷移和同步數(shù)據(jù)的實(shí)例教程

 更新時(shí)間:2015年12月09日 11:45:45   作者:秦朝古月  
這篇文章主要介紹了MySQL觸發(fā)器運(yùn)用于遷移和同步數(shù)據(jù)的實(shí)例教程,分別是SQL Server數(shù)據(jù)遷移至MySQL以及同步備份數(shù)據(jù)表記錄的兩個(gè)例子,需要的朋友可以參考下

1.遷移數(shù)據(jù)
進(jìn)行數(shù)據(jù)庫移植,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的語法。

# 創(chuàng)建 
CREATE TRIGGER <觸發(fā)器名稱> 
{ BEFORE | AFTER } 
{ INSERT | UPDATE | DELETE } 
ON <表名稱> 
FOR EACH ROW 
<觸發(fā)器SQL語句> 
 
# 刪除 
DROP TRIGGER <觸發(fā)器名稱> 

注:創(chuàng)建觸發(fā)器需要CREATE TRIGGER權(quán)限。(HeidiSQL中執(zhí)行Trigger語句會有bug)

由于MySQL中的每個(gè)觸發(fā)器只能針對一個(gè)動作,所以本次移植就需要?jiǎng)?chuàng)建兩個(gè)觸發(fā)器。對于發(fā)生變更的行,在觸發(fā)器中可以用 NEW 來代替。
下邊的觸發(fā)器有什么問題嗎?

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 ; 

問題就是,沒有考慮到觸發(fā)器中的修改也會觸發(fā)觸發(fā)器,進(jìn)入了死循環(huán)。做了如下修改后,終于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.同步備份數(shù)據(jù)記錄表
添加記錄到新記錄表

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觸發(fā)器監(jiān)控mysql數(shù)據(jù)表記錄刪除操作 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 ;

相關(guān)文章

  • Mysql導(dǎo)入導(dǎo)出工具M(jìn)ysqldump和Source命令用法詳解

    Mysql導(dǎo)入導(dǎo)出工具M(jìn)ysqldump和Source命令用法詳解

    Mysql本身提供了命令行導(dǎo)出工具M(jìn)ysqldump和Mysql Source導(dǎo)入命令進(jìn)行SQL數(shù)據(jù)導(dǎo)入導(dǎo)出工作,通過Mysql命令行導(dǎo)出工具M(jìn)ysqldump命令能夠?qū)ysql數(shù)據(jù)導(dǎo)出為文本格式(txt)的SQL文件,通過Mysql Source命令能夠?qū)QL文件導(dǎo)入Mysql數(shù)據(jù)庫中,下面通過Mysql導(dǎo)入導(dǎo)出SQL實(shí)例詳解Mysqldump和Source命令的用法
    2012-09-09
  • MySQL系列之一 MariaDB-server安裝

    MySQL系列之一 MariaDB-server安裝

    本文主要介紹了MariaDB-server安裝的幾種方式,文中通過代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • MySQL中使用JSON存儲數(shù)據(jù)的實(shí)現(xiàn)示例

    MySQL中使用JSON存儲數(shù)據(jù)的實(shí)現(xiàn)示例

    本文主要介紹了MySQL中使用JSON存儲數(shù)據(jù)的實(shí)現(xiàn)示例,我們可以在MySQL中直接存儲、查詢和操作JSON數(shù)據(jù),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • MySQL導(dǎo)入與導(dǎo)出備份詳解

    MySQL導(dǎo)入與導(dǎo)出備份詳解

    大家好,本篇文章主要講的是MySQL導(dǎo)入與導(dǎo)出備份詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • MySQL中延遲復(fù)制的實(shí)現(xiàn)

    MySQL中延遲復(fù)制的實(shí)現(xiàn)

    MySQL延遲復(fù)制允許副本服務(wù)器滯后源服務(wù)器指定時(shí)間,用于數(shù)據(jù)保護(hù)、歷史檢查等,延遲復(fù)制通過設(shè)置MASTER_DELAY選項(xiàng)實(shí)現(xiàn),下面就來介紹 一下,感興趣的可以了解一下
    2025-02-02
  • MySQL如何查看正在運(yùn)行的SQL詳解

    MySQL如何查看正在運(yùn)行的SQL詳解

    在項(xiàng)目開發(fā)里面總是要查看后臺執(zhí)行的sql語句,mysql數(shù)據(jù)庫也不例外,下面這篇文章主要給大家介紹了關(guān)于MySQL如何查看正在運(yùn)行的SQL的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • MYSQL中文亂碼問題的解決方案

    MYSQL中文亂碼問題的解決方案

    mysql是我們項(xiàng)目中非常常用的數(shù)據(jù)型數(shù)據(jù)庫,但是因?yàn)槲覀冃枰跀?shù)據(jù)庫保存中文字符,所以經(jīng)常遇到數(shù)據(jù)庫亂碼情況這篇文章主要給大家介紹了關(guān)于MYSQL中文亂碼問題的解決方案,需要的朋友可以參考下
    2022-06-06
  • MySQL高可用架構(gòu)之MHA架構(gòu)全解

    MySQL高可用架構(gòu)之MHA架構(gòu)全解

    MHA(Master HA)是一款開源的 MySQL 的高可用程序,它為 MySQL 主從復(fù)制架構(gòu)提供了 automating master failover 功能,本文重點(diǎn)給大家介紹MySQL高可用架構(gòu)之MHA架構(gòu)全解,感興趣的朋友一起看看吧
    2021-07-07
  • 淺談Mysql insert on duplicate key 死鎖問題定位與解決

    淺談Mysql insert on duplicate key 死鎖問

    本文介紹了在并發(fā)場景下的 insert on duplicate key update sql 出現(xiàn)的死鎖,經(jīng)過分析發(fā)現(xiàn)這種sql確實(shí)比較容易造成死鎖,這篇文章就從分析死鎖展開,到最終如何解決這樣的問題 分享相應(yīng)的思路,感興趣的可以了解一下
    2022-05-05
  • Mysql字符串字段判斷是否包含某個(gè)字符串的2種方法

    Mysql字符串字段判斷是否包含某個(gè)字符串的2種方法

    這篇文章主要介紹了Mysql字符串字段判斷是否包含某個(gè)字符串的2種方法,本文使用Like和find_in_set兩種方法實(shí)現(xiàn),需要的朋友可以參考下
    2015-01-01

最新評論

瑞丽市| 岗巴县| 房山区| 都江堰市| 霞浦县| 宝鸡市| 喀什市| 邵东县| 武威市| 唐河县| 绍兴市| 安阳县| 鹤峰县| 永济市| 容城县| 清水河县| 扎兰屯市| 平和县| 栾城县| 安陆市| 朝阳县| 武宣县| 延川县| 博白县| 龙岩市| 长葛市| 罗城| 元江| 塔城市| 千阳县| 平阴县| 托克逊县| 富锦市| 大丰市| 含山县| 浠水县| 阿城市| 翼城县| 马尔康县| 大洼县| 德清县|