Как ЗАБЛОКИРОВАТЬ ТАБЛИЦЫ для запроса UPDATE-JOIN в MySQL? - PullRequest
0 голосов
/ 19 мая 2019

Эта последовательность запросов работает:

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 приводит к этой ошибке?

Сначала яполагал, что моя проблема была решена в аналогичном ответе SO , но я не могу себе представить, что бы я сделал по-другому с моим запросом, чтобы использовать псевдонимы таблиц для решения проблемы.

Ближайшая информацияЯ нашел от ответ на вопрос об обмене стеками DBA , но решение не сработало для меня, и разговор немного затянулся.

Что более важно, как я должен построитьмой запрос, чтобы он не потерпел неудачу?В моем примере я сократил запрос, чтобы он был как можно более понятным за счет минимизации его полезности, но я хочу блокировку атомарности и объединение для предложения WHERE.

Наблюдаемый вMariaDB 10.1.36 с таблицами InnoDB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...