我想在更新后更新某些行中的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函数吗?
答案 0 :(得分:0)
没有。这不是一个无限循环。
MySQL限制了触发器中可以执行的操作。
无法在numbers
上的UPDATE触发器内执行此类UPDATE操作(在numbers
中的行上)。并且您不能将UPDATE语句移动到函数,然后从触发器调用该函数...无法使用触发器的执行上下文执行UPDATE。
要执行此更新,需要在触发器的执行上下文之外执行UPDATE。
在这个答案中没有解决的问题是为什么你想要首先执行这样的操作。