1
我希望MySQL触发器自动执行某些操作,而不是将它放在应用程序逻辑中。如何让这个SQL触发器不返回结果而工作?
该方法大致是这样的。
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 sometable(FOO,吧) SELECT X,Y FROM sometable' – artm
'你不能修改您在SELECT part'使用相同的表。你在'INSERT'语句中显然是这样做的。解决方法是不要使用嵌套的子查询并在不同的部分执行它......在另一个说明中,第二个错误“不允许从触发器返回结果集”显然是因为你不能执行'SELECT'语句触发。如果你想设置变量,使用'SELECT INTO' ...另外,我想说的很好的问题! – Codexer