Junior
İki işlem vardır. İlk işlem bir komut çalıştırır. Daha sonra ikinci işlem bir komut çalıştırır. Ardından ilk işlem devam eder. Hangi sıralama karşılıklı kilitlenmeye yol açar? ```sql -- ilk işlem update accounts set balance = balance + 100 where id = ?; -- ikinci işlem update accounts set balance = balance - 50 where id = ?; update accounts set balance = balance + 200 where id = ?; ```
sobes.tech yapay zeka
AI'dan gelen yanıt
Взаимоблокировка (deadlock) возникает, если транзакции блокируют ресурсы в разном порядке и ждут друг друга.
В данном случае:
- Первая транзакция обновляет баланс по id = A (предположим).
- Вторая транзакция обновляет баланс по id = B, затем по id = C.
- Первая транзакция продолжает выполнение и пытается обновить баланс по id = C.
Если первая транзакция заблокировала запись с id = A, а вторая транзакция заблокировала запись с id = C, и теперь первая пытается получить блокировку на id = C, а вторая — на id = A, то возникает взаимоблокировка.
Последовательность, приводящая к deadlock:
- Первая транзакция блокирует запись с id = A.
- Вторая транзакция блокирует запись с id = C.
- Первая транзакция пытается обновить запись с id = C (ждет освобождения).
- Вторая транзакция пытается обновить запись с id = A (ждет освобождения).
Обе транзакции ждут друг друга, что и вызывает deadlock.