欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL觸發(fā)器運用于遷移和同步數據的實例教程

 更新時間:2015年12月09日 11:45:45   作者:秦朝古月  
這篇文章主要介紹了MySQL觸發(fā)器運用于遷移和同步數據的實例教程,分別是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的語法。

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

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

由于MySQL中的每個觸發(fā)器只能針對一個動作,所以本次移植就需要創(chuàng)建兩個觸發(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ā)器,進入了死循環(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.同步備份數據記錄表
添加記錄到新記錄表

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數據表記錄刪除操作 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 ;

相關文章

  • 21分鐘 MySQL 入門教程

    21分鐘 MySQL 入門教程

    這篇文章主要介紹了MySQL 入門教程,通過簡單的介紹基本上可以讓你21分鐘就可以了解下mysql
    2014-06-06
  • Mysql一主多從部署的實現步驟

    Mysql一主多從部署的實現步驟

    本文主要介紹了Mysql一主多從部署的實現步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • mysql 本地數據庫如何從遠程數據庫導數據

    mysql 本地數據庫如何從遠程數據庫導數據

    mysql 本地數據庫如何從遠程數據庫導數據,本文以此問題進行詳細介紹,需要了解的朋友可以參考下
    2012-11-11
  • MySQL修改賬號密碼方法大全(小結)

    MySQL修改賬號密碼方法大全(小結)

    這篇文章主要介紹了MySQL修改賬號密碼方法大全(小結),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • MySQL中的全表掃描和索引樹掃描?的實例詳解

    MySQL中的全表掃描和索引樹掃描?的實例詳解

    這篇文章主要介紹了MySQL中的全表掃描和索引樹掃描?,從本文的學習可以輕松的知道,全表掃描的效率相比于索引樹掃描相對較低一點,但是差距不是很大,具體示例代碼詳解跟隨小編一起看看吧
    2022-05-05
  • MySQL如何清空慢查詢文件

    MySQL如何清空慢查詢文件

    這篇文章主要介紹了MySQL如何清空慢查詢文件,如何在線生成一個新的慢查詢文件,感興趣的小伙伴們可以參考一下
    2015-12-12
  • mysql創(chuàng)建表分區(qū)的實現示例

    mysql創(chuàng)建表分區(qū)的實現示例

    表分區(qū)是指根據一定規(guī)則,將數據庫中的一張表分解成多個更小的,容易管理的部分,本文主要介紹了mysql創(chuàng)建表分區(qū)的實現示例,感興趣的可以了解一下
    2024-01-01
  • 詳解數據庫多表連接查詢的實現方法

    詳解數據庫多表連接查詢的實現方法

    這篇文章主要介紹了詳解數據庫多表連接查詢的實現方法的相關資料,希望通過本文大家能夠掌握數據庫多表查詢的方法,需要的朋友可以參考下
    2017-09-09
  • 對于mysql的query_cache認識的誤區(qū)

    對于mysql的query_cache認識的誤區(qū)

    一直以來,對于mysql的query_cache,在網上就流行著這樣的說法,對于mysql的query_cache鍵值就是mysql的query,所以,如果在query中有任何的不同,包括多了個空格,都會導致mysql認為是不同的查詢
    2012-03-03
  • 你真的會用Mysql的explain嗎

    你真的會用Mysql的explain嗎

    explain顯示了mysql如何使用索引來處理select語句以及連接表,可以幫助選擇更好的索引和寫出更優(yōu)化的查詢語句,下面這篇文章主要給大家介紹了關于Mysql中explain用法的相關資料,需要的朋友可以參考下
    2022-03-03

最新評論