У меня есть таблица с двигателем InnoDB (комментарии) в базе данных MySQL и у меня есть следующий сценарий:Понимания InnoDB и его уровня изоляции и блокировки
Есть два пользователя пытается получить доступ к одной комментариям таблицы в том же время следующим образом:
user1:
INSERT INTO comments (comment) VALUES ('HELLO WORLD');
user2:
SELECT * FROM comments;
Я хочу, чтобы следующие моменты уточнить, пожалуйста:
- user2 не может прочитать (SELECT) из таблицы, он должен подождать некоторое время (я думаю, что пока вставка user1 не finihshed). Ожидается ли это ожидание на уровне строки, которое используется InnoDB?
- Если ответ на предыдущий вопрос был ДА, то Что такое работа MVCC? Двигатель InnoDB. Я прочитал, что MVCC означает, что пользователи могут читать строки таблицы (readable-read), даже если есть ситуация с обновлением или вставкой в одно и то же время (потому что пользователь здесь читает старую версию строки, даже если она обновляется на тем временем).
Примечания:
- Я хочу отметить, что я использую приведенный выше код в следующей форме, но она по-прежнему делает ту же проблему (ожидание проблемы):
user1:
SET AUTOCOMMIT=0;
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
INSERT INTO comments (comment) VALUES ('HELLO WORLD');
COMMIT;
user2:
- Я даже пытаюсь изменить уровень изоляции с повторяемого чтения, чтобы читать без изменений - грязное чтение не так важно в моем случае - (я думал, что он решит проблему ожидания, но это не так. ожидание по-прежнему стоит).
user1:
SET AUTOCOMMIT=0;
START TRANSACTION;
INSERT INTO comments (comment) VALUES ('HELLO WORLD');
COMMIT;
user2:
SELECT * FROM comments;
Большой вопрос Как могли мои пользователи прочитать в то время как другие пользователи вставки или обновления строк?
нет. нет причин, по которым innodb блокирует таблицу для чтения, если вы вставляете другую строку. Просто откройте 2 подключения на двух разных терминалах и запустите свой сценарий – zerkms
Я попробовал, и это не сработало для этого, я задаю вопрос – Basel
Что означает «не работает»? – zerkms