Скажем, у меня есть два пользователя, пытающихся добраться до таблицы в базе данных под названием "комментарии" в следующем порядке:
-
Пользователь1 создает и обновляет запись с id = 10
Комментарии UPDATE SET comment = "Hello World" WHERE id = 10
-
Пользователь2 делает выбор для всех строк одних и тех же комментариев таблицы
SELECT * FROM comments
Я хочу обсудить разницу между следующими случаями:
- Если движок таблицы MyISAM: запрос обновления блокирует целую таблицу, которая будет помещать запрос выбора до тех пор, пока обновление строка закончена, и затем она будет выполнена, что остановит любой пользователь запрашивает что-либо из этой таблицы до тех пор, пока обновление не будет закончил.
- Если движок таблицы InnoDB: запрос на обновление блокирует обновленную строку.
Я ХОЧУ ЗНАТЬ, КАК ЭТО БЛОКИРОВАЛО В ОТНОШЕНИИ ВЫБОРНОГО ЗАПРОСА???
Я имею в виду, что если выбор запрашивает базу данных для всех записей таблицы комментариев и обнаружит, что один из них (id = 10) заблокирован, очередь базы данных снова запрашивает запрос выбора до тех пор, пока обновление не будет завершено?
Если да, то в чем разница между двумя двигателями?
Если нет, я хочу сказать, что у меня такая же ситуация выше на моем веб-сайте, и даже я изменил свои движки таблиц от MyISAM до InnoDB, но проблема очереди в запросах, когда еще есть запрос на обновление или вставку.
Любое объяснение этой ситуации будет настолько полезно. заранее спасибо