Objetivo
Garantir consistĂȘncia de dados sob concorrĂȘncia usando transaçÔes ACID, escolher nĂveis de isolamento adequados e usar triggers com responsabilidade para automaçÔes no banco â sem cair nas armadilhas clĂĄssicas de performance e debugging.
Pontos-chave
- Condição de corrida: o porquĂȘ das transaçÔes existirem (estoque vendido duas vezes, saldo negativo).
- ACID: Atomicity, Consistency, Isolation, Durability â o que cada letra realmente garante.
- NĂveis de isolamento: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE â e as 4 anomalias (dirty read, non-repeatable read, phantom read, serialization anomaly).
- BEGIN / COMMIT / ROLLBACK com TRY/CATCH â o esqueleto de toda transação que vocĂȘ vai escrever.
- Locks pessimistas vs otimistas:
SELECT FOR UPDATEvs versionamento (etag/timestamp). Quando usar cada um. - Triggers: gatilhos automĂĄticos em INSERT/UPDATE/DELETE; tabelas mĂĄgicas
inserted/deleted; tipos BEFORE/AFTER/INSTEAD OF. - Boas prĂĄticas e armadilhas: triggers em cascata, performance, debugging difĂcil, alternativas (event sourcing, change feed).
Bibliografia recomendada
- Designing Data-Intensive Applications â Martin Kleppmann (capĂtulo 7: Transactions).
- Microsoft Docs â SQL Server Transaction Isolation Levels.
- PostgreSQL Docs â Concurrency Control.
- Brent Ozar â artigos sobre deadlocks e troubleshooting de locks em SQL Server.