mysql - #1442 - 无法更新存储函数/触发器中的表 'sale_price',因为它已被语句使用

标签 mysql

我试图在表中插入新行之前更新同一个表。 我想将具有相同 Product_id 的所有先前行的状态设置为 0,然后插入状态为 1 的新行......请帮忙。这是我写的mysql代码..

DROP TRIGGER IF EXISTS `priceStatusUpdate`//
CREATE TRIGGER `priceStatusUpdate` BEFORE INSERT ON `sale_price`
 FOR EACH ROW BEGIN
  UPDATE sale_price 
  SET status=0
  WHERE product_id=new.product_id;
END
//

最佳答案

改用存储过程:

DELIMITER $$
CREATE PROCEDURE procedureName (IN p_product_id)
BEGIN
UPDATE sale_price SET status = 0 WHERE product_id = p_product_id;
INSERT INTO sale_price (product_id) VALUES (p_product_id);
END $$
DELIMITER ;

然后使用

调用它
CALL procedureName(1);

关于mysql - #1442 - 无法更新存储函数/触发器中的表 'sale_price',因为它已被语句使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17747088/

相关文章:

MySQL,计算表中每个字段的值

MySQL 外键约束阻止在父表中插入查询

MySQL插入查询错误代码: 1406.列数据太长

php - 无法使用 PHP 和 Mysql 退出循环

php - 如何只选择大于今天日期和时间的行?

sql - 如何使这个子子查询起作用?

mysql - 具有多个连接的多个 mysql 表

mysql - ON子句的两个位置: Which is faster?

php - 选择带有计数和不带有计数的语句

php - 用mysql数据替换函数中的数组