Блокировками (locks) называются механизмы, применяемые для управления параллельными изменениями данных.
Существует два типа блокировок:
- оптимистические блокировки (optimistic locks) - предотвращают возникновение конфликтных ситуаций, выполняя при необходимости откат транзакции (такие блокировки в стандарте SQL-92 не поддерживаются);
- пессимистические блокировки (pessimistic locks) - предотвращают возникновение конфликтных ситуаций, блокируя одновременный доступ к данным для одновременных транзакций.
Блокировки используются для приостановки выполнения одних SQL-операторов, пока выполняются другие.
Если при пессимистической блокировке выполнен SQL-оператор, который может вызвать конфликтную ситуацию для другого SQL-оператора, то выполнение второго SQL-оператора будет приостановлено. При оптимистической блокировке могут выполняться любые SQL-операторы, но в случае возникновения конфликтной ситуации все изменения будут потеряны.
Блокировки, используемые уровнями изоляции, подразделяются на:
- разделяемые блокировки (S-locks), которые могут одновременно устанавливаться несколькими пользователями;
- исключительные блокировки (X-licks), которые устанавливаются только одним пользователем, получающим эксклюзивный доступ к данным.
Существуют следующие логические и физические уровни блокировок:
- блокировка на уровне таблицы (table-level locking);
- блокировка на уровне строк (row-level locking);
- блокировка на уровне элемента таблицы (item-level locking);
- блокировка на уровне БД (dbspace-level locking);
- блокировка на уровне табличного пространства (tablespace-level locking);
- блокировка на уровне страницы или блока (page-level locking).