我希望MySQL触发器能够自动执行某些操作,而不是将其放入应用程序逻辑中。

方法大致就是这样。

CREATE TRIGGER InsertAction AFTER INSERT
ON UserAction
FOR EACH ROW CALL CreateAutomaticResponse(...);


哪个用途

CREATE PROCEDURE CreateAutomaticResponse (...)
     INSERT INTO SomeTable (foo, bar)
     VALUES
     (
          SELECT x FROM SomeTable ...
          ...
     )


现在这会产生一个错误

ERROR 1093 (HY000) at line 1675: You can't specify target table 'SomeTable' for update in FROM clause


我相信解决方案是做这样的事情

 SELECT @tmp := x FROM SomeTable ...
 INSERT INTO SomeTable (foo, bar) VALUES (@tmp, ...)


麻烦的是我然后得到

ERROR 1415 (0A000) at line 1666: Not allowed to return a result set from a trigger


似乎是SELECT @tmp := ...行引起了这一点。

就我而言,尽管使用SELECT,但此过程未返回任何内容,因为它只是选择一个临时变量。

我可以告诉MySQL考虑该程序不返回任何东西吗?或者以其他方式解决此问题?

最佳答案

INSERT INTO ... SELECT工作正常。

10-08 06:47