Возможны взаимоблокировки, если у вас есть два или более независимых запроса, обращающихся к одним и тем же ресурсам (таблицам / строкам) одновременно.Пример из реальной жизни:
Две механики работают на двух машинах.В какой-то момент во время ремонта они оба нуждаются в отвертке и молотке, чтобы ослабить какую-то плохо застрявшую часть.Механик A хватает отвертку, Механик B хватает молоток, и теперь ни один из них не может продолжить работу, поскольку второй необходимый им инструмент недоступен: они заблокированы.
Теперь люди умны, и один из механиковбудь милостив и передай свой инструмент другому: оба могут продолжать работать.Базы данных несколько глупы, и ни один запрос не будет любезным и не разблокирует любой ресурс, вызывающий тупик.В этот момент СУБД включит Рэмбо и принудительно откатит (или просто уничтожит) один или несколько взаимно заблокированных запросов.Это позволит одному счастливому запросу продолжаться и продолжать получать необходимые блокировки / транзакции, и, надеюсь, у прерванных есть достаточно умные приложения, обрабатывающие их, которые позже перезапустят транзакции позже.В более старых / более простых СУБД вся система остановилась бы до тех пор, пока администратор не вошел в систему и не выполнил некоторую ручную очистку.
Существует множество способов справиться с взаимоблокировками и вообще избежать их.Один большой из них - никогда не блокировать ресурсы в «случайных» порядках.В случае с нашими механиками, оба должны сначала потянуть за отвертку, прежде чем дотянуться до молотка.Таким образом, можно сразу же успешно работать, а другой будет знать, что ему нужно ждать.
Что касается смешивания InnodB / MyISAM - MySQL полностью поддерживает смешивание / сопоставление типов таблиц в запросах.Вы можете выбрать / присоединиться / обновить / вставить / удалить / изменить в любом порядке, в котором вы хотите, просто помните, что выполнение каких-либо действий с таблицей MyISAM в транзакции InnoDB НЕ сделает магически осведомленной транзакцию MyISAM.Части MyISAM будут выполняться / фиксироваться немедленно, и если вы откатите сторону InnoDB, MyISAM также не откатится.
Единственная главная причина, по которой в эти дни придерживаются MyISAM, - это поддержка полнотекстовой индексации,Помимо этого, InnoDB, как правило, будет лучшим выбором, поскольку он имеет полную поддержку транзакций и блокировку на уровне строк.