2012-02-17 45 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