首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法更新存储函数/触发器中的表‘xxx’,因为它已被调用此存储函数/触发器的语句使用

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

Stack Overflow用户
提问于 2017-04-29 15:01:12
回答 1查看 621关注 0票数 1

我的系统产品表和股票表中有两个表。

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

代码语言:javascript
复制
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;

现在,当我尝试执行这个操作时,我得到了错误

代码语言:javascript
复制
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语句锁定?

EN

回答 1

Stack Overflow用户

发布于 2017-04-29 15:15:03

错误消息不言自明,并指出触发器不能用于修改调用该触发器的表。可能可行的一个技巧是将products表包装在子查询中。MySQL具体化了子查询,这可能会绕过这个问题。

代码语言:javascript
复制
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
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43692760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档