Странное поведение оператора обновленияMySql

Форум по Mysql
Ответить
Anonymous
 Странное поведение оператора обновления

Сообщение Anonymous »

Что касается очень простого оператора обновления: < /p>

Код: Выделить всё

UPDATE `user` SET fans = fans +1 where id = 8;
(потому что это не вызовет какую -либо проблему параллелизма, когда только один [автоматический коммит] Использует его, поэтому я хочу выяснить, как она ведет себя в ручной транзакции.) И оказывается, что это утверждение, кажется, нарушает ограничения уровня изоляции RR в транзакции. />
[*] Начните транзакцию a, exec "select * from user < /code>, где id = 8;" и удержание. (Запрос получает fans = 0);
[*] Начало транзакции b, обновление пользователя set fants = fans +1, где id = 8, и Commit.
[*] и теперь, в текущей таблице, фанаты для id = 8 Set to 1. Опять же, в Тране А, и результат фанатов - 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»