我希望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考虑不返回任何内容的程序吗?或以其他方式解决这个问题?
答案 0 :(得分:0)
INSERT INTO ... SELECT工作。