ufm: (bald-headed)
[personal profile] ufm
Как-то до этого с локами таблиц возиться не приходилось, а тут припёрло.

Задача:

Есть три таблицы - T1, T2 и T3
Мне нужно прочитать одну запись из первой таблицы, сколько-то записей из второй, после чего проапдейтить первую и третью.
При этом с момента начала всей этой кутерьмы в первой таблице должна быть заблокирована на чтение/запись конкретная запись с которой я играюсь, вторая таблица должна быть заблокирована целиком, а третья - только на запись.
И это именно отдельные три операции, т.е. между ними там кое что происходит и собрать это в один могутный запрос не получится.
Таблицы - InnoDB, если это на что-то влияет.

Научите?

(no subject)

Date: 2014-04-21 09:48 (UTC)
From: [identity profile] max-tx.livejournal.com
Я смутно помню, что в InnoDB таблицах в MySQL блокировка происходит не на конкретную запись, а на несколько записей в окрестности желаемой. Несколько раз нарывался на неприятные последствия в виде deadlocks. Ну и по вашему сценарию, все запросы выстроятся в очередь за второй таблицей.

(no subject)

Date: 2014-04-23 19:06 (UTC)
From: [identity profile] poige.livejournal.com
Чё-то я не понял, а использовать транзакции для достижения ACID тебе что мешает?