如何在没有'返回'的情况下使这个SQL触发器工作。结果呢?

时间:2016-04-04 00:07:04

标签: mysql sql

我希望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考虑不返回任何内容的程序吗?或以其他方式解决这个问题?

1 个答案:

答案 0 :(得分:0)

INSERT INTO ... SELECT工作。