Грязное чтение MySQL против грязного чтения, определенного в стандарте SQL - PullRequest
0 голосов
/ 22 января 2019

Из руководства MySQL:

READ UNCOMMITTED

Операторы SELECT выполняются без блокировки, но возможна более ранняя версия строки ,Таким образом, используя этот уровень изоляции, такие чтения не согласованы. Это также называется грязным чтением .В противном случае этот уровень изоляции работает как READ COMMITTED.

Я выделен жирным шрифтом.«Может быть использована более ранняя версия строки»?Используется где?И как это можно назвать «грязным чтением»?

Стандарт SQL гласит, что «грязное чтение» содержит данные, которых никогда не было:

P1 («Грязное чтение»): SQL-транзакцияT1 изменяет строку.SQL-транзакция T2 затем читает эту строку, прежде чем T1 выполнит COMMIT.Если T1 затем выполнит ROLLBACK, T2 прочитает строку, которая никогда не была зафиксирована и которая, таким образом, может считаться никогда не существующей.

Неправильно ли здесь руководство по MySQL или что?

1 Ответ

0 голосов
/ 22 января 2019

Определение MySQL: один случай грязного чтения: случай, когда строка уже существует (но обновляется T1) и T2 читает ее.Затем, если T1 откатывается, T2, возможно, выполнил неправильные вычисления с ним.Ужасно.

Определение SQL охватывает больше случаев.Например, когда строки создаются в первый раз T1 (но еще не зафиксированы), а затем читаются T2.В этом случае, если транзакция T1 откатывается, это как если бы строка никогда не существовала ... но T2 уже использует ее для того, кто знает, для каких целей.Гадкий.

В итоге оба случая ужасны и могут привести к несоответствиям.Определение SQL является более полным, чем определение MySQL.

...