В руководстве говорилось, что InnoDB имеет блокировку на уровне строк, так почему, если я выберу некоторые строки с помощью оператора FOR UPDATE, он не позволит мне вставить новую строку в эту таблицу? Новую строку все-таки не нужно блокировать, она не была выбрана.
Вопрос
Почему я не могу вставить новую строку в частично заблокированную таблицу в MySQL 5 InnoDB?
Ответы
Ответ 1 · рейтинг 2 · Andomar
В InnoDB вставка в столбец с автоинкрементом приводит к блокировке таблицы. Выбор строки ДЛЯ ОБНОВЛЕНИЯ приводит к блокировке на уровне строки.
Поскольку вы не можете получить блокировку таблицы, если есть блокировки строк, UPDATE предотвращает INSERT до тех пор, пока его транзакция не будет зафиксирована.
Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.
Похожие материалы
- Mysql Innodb: объединение 3 таблиц в одну для быстрого поиска условных соединений
- Почему сообщаемый размер базы данных (на диске?) отличается от размера в памяти
- Используйте несколько меньших varchars вместо одного большого
- MySql освобождает пространство больших двоичных объектов с помощью InnoDB
- Есть ли идиоматическое явное использование mutex::lock() или unlock()?
- Как заблокировать файл в Perl?