Junior — Middle
81
Was wird das Ergebnis sein, wenn gleichzeitig zwei Transaktionen versuchen, denselben Datensatz in der Datenbank zu aktualisieren?
Antwort von AI
sobes.tech KI
Если две транзакции одновременно пытаются обновить одну и ту же запись в базе данных, результат зависит от уровня изоляции транзакций и механизма блокировок в СУБД.
Чаще всего происходит следующее:
- Первая транзакция получает блокировку на запись и обновляет её.
- Вторая транзакция ждет освобождения блокировки или получает ошибку блокировки (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) поведение зависит от настроек транзакций и уровней изоляции.