亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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ù)庫(kù)移植,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 

簡(jiǎn)單了解了下MySQL中,Trigger的語(yǔ)法。

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

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

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

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 ; 

問(wèn)題就是,沒(méi)有考慮到觸發(fā)器中的修改也會(huì)觸發(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)文章

  • 21分鐘 MySQL 入門(mén)教程

    21分鐘 MySQL 入門(mén)教程

    這篇文章主要介紹了MySQL 入門(mén)教程,通過(guò)簡(jiǎn)單的介紹基本上可以讓你21分鐘就可以了解下mysql
    2014-06-06
  • Mysql一主多從部署的實(shí)現(xiàn)步驟

    Mysql一主多從部署的實(shí)現(xiàn)步驟

    本文主要介紹了Mysql一主多從部署的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • mysql 本地?cái)?shù)據(jù)庫(kù)如何從遠(yuǎn)程數(shù)據(jù)庫(kù)導(dǎo)數(shù)據(jù)

    mysql 本地?cái)?shù)據(jù)庫(kù)如何從遠(yuǎn)程數(shù)據(jù)庫(kù)導(dǎo)數(shù)據(jù)

    mysql 本地?cái)?shù)據(jù)庫(kù)如何從遠(yuǎn)程數(shù)據(jù)庫(kù)導(dǎo)數(shù)據(jù),本文以此問(wèn)題進(jìn)行詳細(xì)介紹,需要了解的朋友可以參考下
    2012-11-11
  • MySQL修改賬號(hào)密碼方法大全(小結(jié))

    MySQL修改賬號(hào)密碼方法大全(小結(jié))

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

    MySQL中的全表掃描和索引樹(shù)掃描?的實(shí)例詳解

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

    MySQL如何清空慢查詢文件

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

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

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

    詳解數(shù)據(jù)庫(kù)多表連接查詢的實(shí)現(xiàn)方法

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

    對(duì)于mysql的query_cache認(rèn)識(shí)的誤區(qū)

    一直以來(lái),對(duì)于mysql的query_cache,在網(wǎng)上就流行著這樣的說(shuō)法,對(duì)于mysql的query_cache鍵值就是mysql的query,所以,如果在query中有任何的不同,包括多了個(gè)空格,都會(huì)導(dǎo)致mysql認(rèn)為是不同的查詢
    2012-03-03
  • 你真的會(huì)用Mysql的explain嗎

    你真的會(huì)用Mysql的explain嗎

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

最新評(píng)論