Sobes.tech
Junior — Middle
88

Care va fi rezultatul dacă două tranzacții încearcă să actualizeze în același timp aceeași înregistrare în baza de date?

Răspuns de la 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) поведение зависит от настроек транзакций и уровней изоляции.