Блокировка при транзакции в mysql, как она работает?

У меня есть таблица images с 3-я колонками: id, product_id и cover. В ней, допустим, очень много записей, которые постоянно читаются. Т.е. не хотелось бы чтобы таблица блокировалась.


В таблице есть 100 записей (с product_id=777), у одной из которых cover=1, а у остальных 99-ти cover=0. Тут внезапно я захотел установить признак cover к другой картинке, и обнулить у текущей, и написал запросы:

BEGIN;<br/>
<br/>
# Сначала сбрасываю обложку у товара №777<br/>
UPDATE images SET cover=0 WHERE product_id=777 AND cover=1 LIMIT 1;<br/>
<br/>
# Устанавливаю новую обложку для товара (AND product_id=777 тут для наглядности)<br/>
UPDATE images SET cover=1 WHERE id=5000 AND product_id=777 LIMIT 1;<br/>
<br/>
COMMIT;



Так вот, означает ли, что при такой транзакции заблокируются только все записи товара с product_id=777, а не вся таблица целиком?
  • Вопрос задан
  • 2857 просмотров
Пригласить эксперта
Ответы на вопрос 1
@yadaya
Смотря в каком режиме работает БД. Если MyISAM, то заблокируется вся таблица, если InnoDB, то только строка.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы