Declaração MySQL START TRANSACTION
A instrução `START TRANSACTION` no MySQL é usada para iniciar uma nova transação, permitindo que várias operações SQL sejam executadas como uma única unidade de trabalho. Ele garante que todas as operações dentro da transação sejam concluídas com êxito antes de confirmar as alterações no banco de dados, mantendo a integridade e a consistência dos dados.
Uso
O `START TRANSACTION` é usado quando você precisa garantir que um conjunto de operações seja atômico, ou seja, ou todas as operações são bem-sucedidas ou nenhuma é. Isso é fundamental para manter a integridade dos dados em cenários que envolvem várias alterações dependentes no banco de dados.
START TRANSACTION;
Nessa sintaxe, `START TRANSACTION` inicia uma nova transação, isolando as operações subsequentes até que um `COMMIT` ou `ROLLBACK` seja emitido. Observe que `BEGIN` ou `BEGIN WORK` também podem ser usados como sinônimos para iniciar uma transação, e você pode especificar as características da transação, como níveis de isolamento, se necessário.
Exemplos
1. Transação básica
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;
Esse exemplo básico transfere fundos entre duas contas. A transação garante que as duas atualizações sejam aplicadas juntas.
2. Transação com reversão
START TRANSACTION;
INSERT INTO orders (order_id, product_id, quantity) VALUES (1, 101, 2);
DELETE FROM inventory WHERE product_id = 101 AND quantity < 0;
ROLLBACK;
Aqui, uma reversão é usada para desfazer as alterações se a operação de exclusão falhar, mantendo a consistência do banco de dados.
3. Transação com condição
START TRANSACTION;
UPDATE products SET stock = stock - 5 WHERE product_id = 200 AND stock >= 5;
IF ROW_COUNT() = 0 THEN
ROLLBACK;
ELSE
INSERT INTO order_details (order_id, product_id, quantity) VALUES (10, 200, 5);
COMMIT;
END IF;
Esse exemplo incorpora uma condição para verificar os níveis de estoque antes de confirmar a transação para garantir que as regras de estoque sejam seguidas. Certifique-se de que você seja compatível com a versão do MySQL em uso, pois a sintaxe pode variar.
Dicas e práticas recomendadas
- Use transações para operações críticas. Aplique transações para operações que devem ser atômicas, consistentes, isoladas e duráveis (ACID).
- Sempre encerre as transações. Conclua cada transação com `COMMIT` ou `ROLLBACK` para liberar os bloqueios e evitar possíveis problemas.
- Cuidado com as transações longas. Mantenha as transações o mais curtas possível para reduzir a contenção de bloqueios e melhorar o desempenho.
- Verifique se há erros. Implemente o tratamento de erros nas transações para decidir se você deve confirmar ou reverter com base no sucesso ou na falha.
- Evite a interação com o usuário. Não inclua prompts de usuário em uma transação para evitar uma longa duração da transação.
- Entenda o comportamento de autocommit. Por padrão, o MySQL opera com o modo de autocommit ativado. Ao usar transações, desative o autocommit para gerenciar manualmente as transações.
- Transações aninhadas. O MySQL não oferece suporte a transações aninhadas verdadeiras. Esteja ciente dessa limitação ao projetar fluxos de trabalho transacionais complexos.