我希望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工作正常。