无法更新存储函数/触发器中的表“事务”,因为它已被调用此存储函数/触发器的语句使用
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 错误:无法更新存储函数/触发器中的表,因为它已被调用此存储函数/触发器的语句使用