Junior — Middle
82
Wat zal het resultaat zijn als twee transacties tegelijkertijd proberen hetzelfde record in de database bij te werken?
Antwoord van AI
sobes.tech AI
Если две транзакции одновременно пытаются обновить одну и ту же запись в базе данных, результат зависит от уровня изоляции транзакций и механизма блокировок в СУБД.
Чаще всего происходит следующее:
- Первая транзакция получает блокировку на запись и обновляет её.
- Вторая транзакция ждет освобождения блокировки или получает ошибку блокировки (deadlock).
- Если вторая транзакция не может получить блокировку, она может быть откатана или повторена.
Это предотвращает состояние гонки и обеспечивает целостность данных.
Пример на Python с использованием SQLite (который поддерживает блокировки на уровне базы):
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
try:
cursor.execute('BEGIN TRANSACTION')
cursor.execute('UPDATE users SET balance = balance + 100 WHERE id = 1')
conn.commit()
except sqlite3.OperationalError:
conn.rollback()
В реальных системах с более сложными СУБД (PostgreSQL, MySQL) поведение зависит от настроек транзакций и уровней изоляции.