Сведения о вопросе

None

12:35, 28th August, 2020

Теги

MySQL    

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

Просмотров: 318   Ответов: 1

У меня есть таблица 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, а не вся таблица целиком?



  Сведения об ответе

#hash

00:11, 12th August, 2020

Смотря в каком режиме работает БД. Если MyISAM, то заблокируется вся таблица, если InnoDB, то только строка.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться