Что происходит, если операция внутри транзакции завершается с ошибкой
Python
Middle
Без компании
Что происходит, если операция внутри транзакции завершается с ошибкой
Ответы
При ошибке внутри транзакции происходит откат (rollback) всех изменений, сделанных в рамках этой транзакции, до состояния на момент начала транзакции. Это обеспечивает атомарность - либо выполняются все операции транзакции, либо ни одна.
Пример с SQLite:
```
import sqlite3
conn = sqlite3.connect(':memory:')
cursor = conn.cursor()
cursor.execute("CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT)")
try:
conn.execute("BEGIN TRANSACTION")
cursor.execute("INSERT INTO test VALUES (1, 'success')")
cursor.execute("INSERT INTO test VALUES (1, 'duplicate')") # Ошибка дубликата PK
conn.commit()
except sqlite3.IntegrityError:
conn.rollback()
print("Transaction rolled back")
# Проверяем, что таблица пуста
print(cursor.execute("SELECT * FROM test").fetchall()) # []
```
Даже если первая вставка прошла успешно, из-за ошибки во второй операции вся транзакция откатится.