Являются ли блокировки записей, блокировки пробелов, блокировки следующего ключа, блокировки намерений вставки и блокировки АВТОМАТИЧЕСКОГО включения частью блокировок намерений?

#mysql #locks

Вопрос:

Согласно документации MySQL, все типы блокировок являются разными типами блокировок. Но все они используют для совместного ИСПОЛЬЗОВАНИЯ или ДЛЯ инструкции ОБНОВЛЕНИЯ в качестве блокировок намерений. Поэтому я не могу понять, являются ли блокировки записей, блокировки пробелов, блокировки следующего ключа, блокировки намерений вставки и блокировки АВТОМАТИЧЕСКОГО включения частью блокировок намерений или это абсолютно разные типы блокировок, но с одинаковым синтаксисом

Комментарии:

1. как вы получили это понятие? и ответ явно отрицательный

2. Например, есть пример блокировки записи, который выглядит как ВЫБЕРИТЕ c1 ИЗ t, ГДЕ c1 = 10 ДЛЯ ОБНОВЛЕНИЯ; в документации в разделе Блокировки записей

3. FOR update выполнит блокировку строк для выбранных строк, но если у вас много строк, вы получаете блокировку таблицы, это не имеет ничего общего с блокировками намерений

4. Я не уверен на 100%, о чем вы спрашиваете, но чтобы уточнить эту документацию: эти блокировки не являются тем, что вы выбираете напрямую. Вы сообщаете MySQL свой уровень изоляции, пишете свой запрос (возможно, указывая for update/share ), и MySQL сам выбирает правильные внутренние блокировки для обеспечения надлежащего поведения. Эти детали являются «просто» технической документацией, вы можете использовать MySQL абсолютно правильно, даже не слыша о блокировках следующего ключа.

Ответ №1:

Нет, вы смешиваете блокировки намерений с различными типами фактических блокировок!

Как говорится в документации mysql, которую вы указали в своем вопросе (курсив мой):

Блокировки намерений — это блокировки на уровне таблицы, которые указывают, какой тип блокировки (общий или эксклюзивный) требуется транзакции позже для строки в таблице.

Все остальные перечисленные вами блокировки являются фактическими блокировками, используемыми при выполнении инструкций insert, update или delete.