From e3168994bf41264a61a9835b1f7db2d174f189e4 Mon Sep 17 00:00:00 2001 From: Arthur Date: Wed, 21 Apr 2021 12:49:13 +0300 Subject: [PATCH] Update db.md --- db.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/db.md b/db.md index 8311693..3f7aa80 100644 --- a/db.md +++ b/db.md @@ -261,7 +261,17 @@ __Долговечность (durability)__. Независимо от проб + __Потерянное обновление (lost update)__ — при одновременном изменении одного блока данных разными транзакциями одно из изменений теряется; + __«Грязное» чтение (dirty read)__ — чтение данных, добавленных или изменённых транзакцией, которая впоследствии не подтвердится (откатится); + __Неповторяющееся чтение (non-repeatable read)__ — при повторном чтении в рамках одной транзакции ранее прочитанные данные оказываются изменёнными; -+ __Фантомное чтение (phantom reads)__ — одна транзакция в ходе своего выполнения несколько раз выбирает множество записей по одним и тем же критериям. Другая транзакция в интервалах между этими выборками добавляет или удаляет записи или изменяет столбцы некоторых записей, используемых в критериях выборки первой транзакции, и успешно заканчивается. В результате получится, что одни и те же выборки в первой транзакции дают разные множества записей. ++ __Фантомное чтение (phantom reads)__ — одна транзакция в ходе своего выполнения несколько раз выбирает множество записей по одним и тем же критериям. Другая транзакция в интервалах между этими выборками добавляет или удаляет записи или изменяет столбцы некоторых записей, используемых в критериях выборки первой транзакции, и успешно заканчивается. В результате получится, что одни и те же выборки в первой транзакции дают разные множества записей. +Предположим, имеется две транзакции, открытые различными приложениями, в которых выполнены следующие SQL-операторы: + +| Транзакция 1 | Транзакция 2 | +|--------------|--------------| +| | SELECT SUM(f2) FROM tbl1; | +| INSERT INTO tbl1 (f1,f2) VALUES (15,20); | | +| COMMIT; | | +| | SELECT SUM(f2) FROM tbl1;| + +В транзакции 2 выполняется SQL-оператор, использующий все значения поля f2. Затем в транзакции 1 выполняется вставка новой строки, приводящая к тому, что повторное выполнение SQL-оператора в транзакции 2 выдаст другой результат. Такая ситуация называется чтением фантома (фантомным чтением). От неповторяющегося чтения оно отличается тем, что результат повторного обращения к данным изменился не из-за изменения/удаления самих этих данных, а из-за появления новых (фантомных) данных. [к оглавлению](#Базы-данных)