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

时间:2017-04-29 07:01:12

标签: mysql

我的系统产品表和库存表中有2个表。

我在stock表中有一个触发器来更新产品表,如下所示:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners
        android:bottomRightRadius="10dp"
        android:topRightRadius="10dp" />
    <solid android:color="@android:color/black" />
</shape>

现在,当我尝试执行此操作时,我收到错误

CREATE TRIGGER `Stock_Delete_Update_Products` AFTER DELETE ON  
`netshop_stock` FOR EACH ROW BEGIN UPDATE products SET 
products_last_modified = NOW( ) WHERE products_model = old.product_model;

我理解select查询会锁定product表,从而阻碍了触发器。有没有办法阻止select语句的锁定?

1 个答案:

答案 0 :(得分:0)

错误消息不言自明,并说触发器不能用于修改调用该触发器的表。可能有效的一个技巧是将products表包装在子查询中。 MySQL实现了子查询,这可能会解决问题。

DELETE FROM netshop_stock 
WHERE netshop_stock.product_model IN
(
    SELECT DISTINCT p.products_model
    FROM (SELECT * FROM products) p
    WHERE p.products_esd = 1
)