如何在MySQL中为UPDATE-JOIN查询锁定表?

时间:2019-05-19 04:27:53

标签: mysql sql

此查询序列有效:

LOCK TABLES order_product WRITE, product READ;
UPDATE order_product
    SET order_product.quantity = order_product.quantity + 1;

这个查询(没有LOCK TABLES)也可以工作:

UPDATE order_product
    INNER JOIN product ON order_product.product_id = product.id
    SET order_product.quantity = order_product.quantity + 1;

但是此查询序列失败并出现错误:

LOCK TABLES order_product WRITE, product READ;
UPDATE order_product
    INNER JOIN product ON order_product.product_id = product.id
    SET order_product.quantity = order_product.quantity + 1;

错误:

#1100 - Table 'order_product' was not locked with LOCK TABLES

为什么将LOCK TABLES,UPDATE和INNER JOIN结合使用会导致此错误?

起初,我认为我的问题是在a similar SO answer中解决的,但是我无法想象我将使用表别名来解决该问题的查询会有所不同。

我找到的最接近的信息来自a answer on DBA stack exchange,但是该解决方案对我而言不起作用,并且谈话变得有些烦人。

更重要的是,如何构造查询以确保查询不会失败?在我的示例中,我以最小化查询的有效性为代价,将查询简化为尽可能易于理解,但是我想要原子性的锁和WHERE子句的连接。

在具有InnoDB表的MariaDB 10.1.36中进行了观察。

0 个答案:

没有答案