mysql 用不同别名锁定同一表

ruarlubt  于 2023-05-05  发布在  Mysql
关注(0)|答案(2)|浏览(123)

我试图锁定一组特定查询中涉及的所有表,但其中一个查询对自己进行了self JOIN。我该怎么锁呢?

LOCK TABLES employees e READ,
            employees e2 READ;

从表面上看,这似乎应该工作,但在我的测试中,它似乎没有?是我的测试只是拙劣还是真的不工作?还是有什么我不知道的事发生了?

g6ll5ycj

g6ll5ycj1#

您需要同时为别名和表本身获取锁

LOCK TABLES employees READ, employees AS employees_read READ;

SELECT * FROM employees AS employees_read;

UNLOCK TABLES;

here & here

rkttyhzu

rkttyhzu2#

再加上我的两分钱:当多次锁定表别名时,即使使用相同的表/别名并锁定其中的每一个,也需要使用不同的别名:(不好意思,举个愚蠢的例子)

LOCK TABLES
    orders READ,
    order_items READ,
    orders AS orders2 READ,
    orders AS orders3 READ;

SELECT *
FROM orders
WHERE (
    SELECT COUNT(*) 
    FROM order_items
    JOIN orders AS orders2
    ON orders2.id = order_items.order_id
    WHERE orders2.date BETWEEN '2023-01-01' AND '2023-03-31'
) > 0
AND (
    SELECT COUNT(*) 
    FROM order_items
    JOIN orders AS orders3
    ON orders3.id = order_items.order_id
    WHERE orders3.location = 'Kansas'
) > 0;

UNLOCK TABLES;

相关问题