Насколько я понимаю, при уровне изоляции SERIALIZABLE я не вижу никаких незафиксированных данных, но мой простой вывод прототипа не имеет смысла для меня. Начальное значение «готово», и второе соединение запускает транзакцию, которая устанавливает значение «установить» БЕЗ фиксации. Затем при первом соединении я проверяю значение и вижу «set», которое является незафиксированным значением, а не то, что я должен видеть на уровне SERIALIZABLE.
Соединение 1:
set SESSION transaction isolation level SERIALIZABLE;
insert into test (name) values ('ready');
Соединение2:
SET autocommit = OFF;
set session transaction isolation level SERIALIZABLE;
start transaction;
update test set name = 'set' where id = 1;
-- THERE IS NO COMMIT HERE
Соединение 1:
select * from test; -- shows the single row with 'set' as the value
Может кто-нибудь объяснить, почему я вижу здесь незафиксированные значения? Мое понимание уровней изоляции неверно или, может быть, мой скрипт некорректен?