Эта последовательность запросов работает:
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.