无法更新存储函数/触发器中的表“事务”,因为它已被调用此存储函数/触发器的语句使用

Posted

技术标签:

【中文标题】无法更新存储函数/触发器中的表“事务”,因为它已被调用此存储函数/触发器的语句使用【英文标题】:Can't update table 'transaction' in stored function/trigger because it is already used by statement which invoked this stored function/trigger 【发布时间】:2014-05-22 13:25:40 【问题描述】:

我的触发器有问题。

DELIMITER $$
CREATE TRIGGER complete_transation
AFTER INSERT ON transaction
FOR EACH ROW BEGIN

DECLARE id_trans INT;
DECLARE id_stock INT;
DECLARE type_transaction BIT(1);
DECLARE id_match INT;

SET @id_trans = NEW.idTransaction;
SET @id_stock = NEW.stock_idStocks;
SET @type_transaction = NEW.type;

IF(@type_transaction = 1) THEN
    SET @id_match = (SELECT idTransaction FROM transaction WHERE stock_idStocks = @id_stock AND type = 0);
    UPDATE transaction SET status = 1 WHERE idTransaction = @id_match;
END IF;
IF(@type_transaction = 0) THEN
    SET @id_match = (SELECT idTransaction FROM transaction WHERE stock_idStocks = @id_stock AND type = 1);
    UPDATE transaction SET status = 1 WHERE idTransaction = @id_match;
END IF;



END$$
DELIMITER ;

是否有机会更改调用触发器的表中的其他记录?

【问题讨论】:

【参考方案1】:

在存储的函数或触发器中,不允许修改已被调用函数或触发器的语句使用(用于读取或写入)的表。 当触发器触发时,它可能会锁定表。

【讨论】:

以上是关于无法更新存储函数/触发器中的表“事务”,因为它已被调用此存储函数/触发器的语句使用的主要内容,如果未能解决你的问题,请参考以下文章

错误代码:1442。无法更新存储函数/触发器中的表“客户”,因为它已被调用此存储函数的语句使用

MySql 错误:无法更新存储函数/触发器中的表,因为它已被调用此存储函数/触发器的语句使用

无法更新存储函数/触发器中的表“example_table”,因为它已被调用此存储函数/触发器的语句使用

MySQL:在自己的触发器中更新表

当列字段达到0时触发删除行?

如果更新,则在同一张表上执行触发器