更新更新触发器中的其他行

时间:2016-07-08 16:29:22

标签: mysql sql triggers

我想在更新后更新某些行中的order_key。一般来说,这是我的想法:

CREATE TRIGGER `trigger_numbers_before_update` BEFORE UPDATE ON `numbers`
 FOR EACH ROW BEGIN
IF NEW.order_key <> OLD.order_key THEN
    UPDATE `numbers` set `order_key` = `order_key`+1 where `order_key` >= NEW.order_key AND `book_id`=NEW.book_id;
END IF;
END

但是我收到了一个错误:

Error: SQLSTATE[HY000]: General error: 1442 Can't update table 'numbers' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

我认为这只是意味着无限循环。所以你知道一些正确的方法,除了在更新后从PHP中激活SQL函数吗?

1 个答案:

答案 0 :(得分:0)

没有。这不是一个无限循环。

MySQL限制了触发器中可以执行的操作。

无法在numbers上的UPDATE触发器内执行此类UPDATE操作(在numbers中的行上)。并且您不能将UPDATE语句移动到函数,然后从触发器调用该函数...无法使用触发器的执行上下文执行UPDATE。

要执行此更新,需要在触发器的执行上下文之外执行UPDATE。

在这个答案中没有解决的问题是为什么你想要首先执行这样的操作。

相关问题