Блокировки
(Locks)
Блокировки
— это семафоры, которые приспособлены для двух операций транзакции (commit и
abort). Они используются для обеспечения последовательного доступа конкурирующих
потоков или процессов к критическим секциям. Обычно в базах данных блокируется
некоторое множество данных (range of items), так как блокировка одного
элемента более накладна. Представьте такой запрос:
Select
* from Customer where country = Russia and city = "Moscow";
Чтобы защитить
данные от рассмотренных выше неприятностей, надо заблокировать все строки таблицы,
которые удовлетворяют указанному критерию поиска. Такой способ защиты, оказывается,
обладает побочным эффектом. Он может породить запись-призрак (phantom). Допустим,
что в это же время другой поток процесса добавляет в ту же таблицу Customer
(Клиент) новую запись и ее поля удовлетворяют тому же критерию (клиент из Мосвы).
Она, конечно же, будет добавлена в таблицу, но для первого потока она является
фантомом (не существует).