MYSQL - Блокировка - InnoDB - PullRequest
       14

MYSQL - Блокировка - InnoDB

4 голосов
/ 30 января 2012

Я использую mysql с базами данных InnoDB.

Если все мои транзакции являются операциями вставки и выбора (без обновлений), я предполагаю, что мне не придется беспокоиться о взаимоблокировке SQL.

Я могуНе вижу сценария, где может возникнуть взаимоблокировка.Правильно ли я предположить, что взаимоблокировка не может произойти, если я только делаю Вставки и Выборы?

Может быть неактуально, но все транзакции выполняются с PDO

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Нет.Вам по-прежнему нужно беспокоиться о взаимоблокировке SQL.

Вы можете получить взаимоблокировки даже в случае транзакции, которая вставляет одну строку.Это связано с тем, что операция вставки не является атомарной, и блокировки автоматически устанавливаются для (возможно нескольких) индексных записей вставленной строки.

0 голосов
/ 14 ноября 2014

Механизм хранения InnoDB MySQL имеет блокировки на уровне строк, а механизм хранения MyISAM MySQL имеет блокировки на уровне таблиц.MyISAM просто блокирует целые таблицы и не поддерживает транзакции, поэтому невозможно получить взаимные блокировки на уровне базы данных.Обратите внимание, что приложение может заблокировать другое приложение, сидя на столе в таблице, к которой они оба пытаются получить доступ, но это ошибка кода, а не «тупик» на уровне базы данных.

InnoDB поддерживает транзакциии имеет блокировки на уровне строк, поэтому возможны взаимоблокировки на уровне базы данных (и могут иногда происходить в загруженной системе, поэтому вам нужно кодировать их).Многие из того, что MySQL будет называть «взаимоблокировками», не являются «настоящими взаимоблокировками», а являются результатом медленных обновлений, приводящих к истечению времени ожидания других запросов при блокировке строк.

...