Что такое deadlock в SQL
Python
Middle
Без компании
Что такое deadlock в SQL
Ответы
Deadlock возникает, когда две или более транзакции блокируют ресурсы, которые нужны друг другу, и ни одна не может продолжить выполнение.
**Пример:**
Транзакция 1 блокирует строку A и пытается получить доступ к строке B, а транзакция 2 блокирует строку B и пытается получить доступ к строке A.
```
-- Транзакция 1
BEGIN;
UPDATE table1 SET col1 = 1 WHERE id = 1; -- Блокировка строки A
UPDATE table1 SET col1 = 2 WHERE id = 2; -- Ожидание строки B
-- Транзакция 2 (параллельно)
BEGIN;
UPDATE table1 SET col1 = 3 WHERE id = 2; -- Блокировка строки B
UPDATE table1 SET col1 = 4 WHERE id = 1; -- Ожидание строки A
```
**Решение:**
- Использование `NOWAIT` или таймаутов (`SET LOCK_TIMEOUT`).
- Оптимизация порядка блокировок.
- СУБД автоматически обнаруживает deadlock и отменяет одну из транзакций.