我的系统产品表和股票表中有两个表。
我在stock表中有一个delete触发器来更新产品表,如下所示:
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;现在,当我尝试执行这个操作时,我得到了错误
delete from netshop_stock
where netshop_stock.product_model in (select distinct
products.products_model from products where products.products_esd=1);我知道select查询锁定了product表,因此阻碍了触发器。有没有办法防止select语句锁定?
发布于 2017-04-29 15:15:03
错误消息不言自明,并指出触发器不能用于修改调用该触发器的表。可能可行的一个技巧是将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
)https://stackoverflow.com/questions/43692760
复制相似问题