2012-09-21 45 views
1

有什麼辦法在Mysql中的兩個不同的數據庫上創建觸發器?我的要求是這樣的: -想要在Mysql中爲兩個不同的數據庫寫入觸發器

database: test1 -> table: tmp1 
database: test2 -> table: tmp2 

現在我不得不使用Test1上插入操作觸發發生在TMP1的值必須被插入到test2的數據庫TMP2。也是一個詩節。 即在test2數據庫的tmp2表上再插入一個觸發器,如果​​插入到tmp2中,則插入到test1數據庫的tmp1表中。

我試圖在兩者上都寫觸發器,但我認爲它會進入循環插入其他表。

DELIMITER $$ 
CREATE TRIGGER trigger_ad_t1 AFTER insert ON `test1`.tmp1 
FOR EACH ROW 
Begin 
    INSERT INTO `test2`.tmp2 VALUES (NEW.employeeNumber,New.fname,New.lname) 
END$$ 
DELIMITER ; 

插入到tmp2表後插入到tmp1中的相同類型的觸發器。

我還在我的本地電腦上測試了這個觸發器,這個觸發器有mysql 5.1.63,但是當我在我的測試服務器上有mysql 5.0.45這個觸發器時,它給了我語法錯誤(1064)。不知道是什麼問題?

UPDATE:

With delimeter without delimeter

任何人可以幫助我擺脫它。

謝謝

+0

一個人也沒有誰可以解決我的問題? – pkachhia

回答

1

在觸發器中使用完全限定的表名。
I.e.
db1.test1.* and d2.test2.*

P.S.再次看到你的SQL後,我意識到你已經做了ARE

編輯:註釋字段是限制後的代碼,所以這裏是你如何避免無休止的循環語句(假設employeeNumber爲唯一鍵):

編輯的代碼

:需要

IF NOT EXISTS(SELECT employeeNumber FROM otherDB.otherTable WHERE employeeNumber = NEW.employeeNumber) THEN 
INSERT INTO otherDB.otherTable VALUES (NEW.employeeNumber,New.fname,New.lname) 
END IF; 

修正在代碼最初提供: ... EXISTS(SELECT * FROM otherDB.otherTable ...)被替換
... EXISTS(SELECT employeeNumber FROM otherDB.otherTable ...)
原因是,第一個查詢將總是返回true因爲內部查詢SELECT * FROM ...總是返回包含結果=>
EXISTS(SELECT * FROM ...)的頭號記錄始終是true

+0

感謝您的回覆,當我僅應用於一個數據庫時,我的觸發器正常工作,但是當我在兩個數據庫上都寫入相同類型的觸發器時,它會發生錯誤。 – pkachhia

+0

你應該在你的'insert'語句中添加'exists'類型的檢查 –

+0

我知道我必須寫這樣的東西,但我很新的觸發器,所以你可以簡單地解釋它,所以我可以使用存在類型檢查? – pkachhia

相關問題