Код: Выделить всё
UPDATE `user` SET fans = fans +1 where id = 8;
[*] Начала транзакция a и hold. < /li>
Начало транзакции b, обновление пользователя < /code> set fans = fans +1, где id = 8, и Commit. < /li>
и теперь, в текущей таблице, фанаты для id = 8 Set to 1. < /li>
exec 'exec * exec * exec * exec * exec * exec * exec * exec * exec * exec * exec * exec>; В Tran A, и результат фанатов - 0, он оправдывает ожидания. (Поскольку мы находимся в RR, не должны видеть никаких обновлений после начала нашей транзакции.)
Но, когда Exec «Обновите пользователь set fans = fans +1, где id = 8;» В Tran A и используйте «Выберите * из пользователя где id = 8;» Опять же, мы видим, что поле «фанатов» обновляется до 2.
Кажется, что это поведение RC, а не RR Hehavior. (но «Select @@ Transaction_isolation;» говорит, что он находится в «повторяющемся чтении»). < /li>
Commit tran a, 'Fans' Значение переходит к 2. < /li>
< /ol>
Моя версия mysql-«8.0.41-0.22.04.1». Innodb. Я не эксперт, поэтому я очень смущен, с нетерпением жду какого -либо понимания этого.
Подробнее здесь: https://stackoverflow.com/questions/795 ... -statement
Мобильная версия