2012-02-17 82 views
0

我有這樣的SQLite觸發器:MySQL的觸發轉換

CREATE TRIGGER update_rating AFTER UPDATE ON gameServers 
FOR EACH ROW BEGIN UPDATE gameServers 
SET rated_order=NEW.rating || '#' || NEW._address 
WHERE rowid=NEW.rowid; END; 

請幫助我,用它轉換到MySQL。

+1

在側面,只要注意:http://stackoverflow.com/questions/2334478/mysql-triggers-cannot-update-rows-in-same-table-the -trigger-is-assigned-to-sugg(除了觸發器在mysql觸發器中被調用的行之外的操作不可行)。不是你的問題(現在),但也許以後......並且有很好的例子。 – 2012-02-17 11:31:25

回答

1
CREATE TRIGGER update_rating BEFORE UPDATE ON gameServers 
FOR EACH ROW SET NEW.rated_order=CONCAT(NEW.rating,' # ',NEW.address); 

當然 - 這並沒有ON INSERT ...

注意,我改變了它從後BEFORE(相當故意):除了我爲什麼要後開始另一個更新的問題(!)觸發觸發器的問題有Updating table in trigger after update on the same table 您的AFTER觸發器中的(完整)「UPDATE」語句會導致一個循環的觸發器調用觸發器調用觸發器......(這將通過拒絕語句來阻止)

編輯:起初我想用'||'字符串連接,但這是MySQL,而不是Oracle :)

它應該工作,我真的測試它在我自己的表之一,以確保。這觸發的東西是善變有時:)

+0

它會起作用,因爲它有助於在修改之前更改記錄。 – Devart 2012-02-17 13:20:31

+0

@Mörre您對連接運算符||是正確的,但您可以配置mysql服務器以接受它的形式||像甲骨文do.Just要注意:) – rkosegi 2012-02-17 19:08:18

+0

很酷,謝謝,不知道。儘管我不會使用它,但在軟件和硬件方面,我總是嘗試使用「默認值」 - 因此我的屏幕上沒有小部件或花哨的東西,我的車上或車上也沒有「裝飾品」:)我想知道其他人都可以獲得什麼(因爲我是一名自由職業者,所以當我去下一個客戶的時候沒有感覺損失)。 – 2012-02-18 11:39:12