Middle
Какви видове блокировки съществуват в SQL?
sobes.tech AI
Отговор от AI
Видове блокировки в SQL:
-
По ниво:
- Блокировки на таблици (Table Locks): Блокира цялата таблица. Лесни за реализиране, но могат значително да намалят паралелизма. Подходящи за операции, които променят цялата таблица (например
ALTER TABLE). - Блокировки на редове (Row Locks): Блокира отделни редове. Осигурява висок паралелизъм, но изисква повече ресурси за управление. По подразбиране в повечето СУБД за
INSERT,UPDATE,DELETE.
- Блокировки на таблици (Table Locks): Блокира цялата таблица. Лесни за реализиране, но могат значително да намалят паралелизма. Подходящи за операции, които променят цялата таблица (например
-
По тип на достъпа:
- Споделена блокировка (Shared Lock - S Lock): Позволява на няколко транзакции да четат данни едновременно, но забранява писане от други.
- Ексклузивна блокировка (Exclusive Lock - X Lock): Позволява само на една транзакция да получи достъп до данните (за четене и писане) и блокира другите.
- Заявка за блокировка (Intention Lock): Използва се, за да указва на СУБД, че транзакциите планират да поставят блокировка на по-ниско ниво (редове или таблици). Например,
IS(Intention Shared),IX(Intention Exclusive). Помага на СУБД по-бързо да провери съвместимостта на блокировките.
-
Други видове:
- Диапазонна блокировка (Range Lock): Блокира диапазон от редове в индекс. Използва се за предотвратяване на фантомно четене.
- Блокировка на метаданни (Metadata Lock): Блокира метаданните на обекта (таблица, изглед и т.н.). Използва се при изпълнение на DDL операции.
Съвместимостта на блокировките определя дали няколко транзакции могат да поддържат едновременно определени типове блокировки върху един и същи обект.
| Тип блокировка | S | X | IS | IX |
|---|---|---|---|---|
| S | Да | Не | Да | Не |
| X | Не | Не | Не | Не |
| IS | Да | Не | Да | Да |
| IX | Не | Не | Да | Да |