Declaração COMMIT do MySQL
A instrução `COMMIT` no MySQL é usada para salvar permanentemente todas as alterações feitas durante a transação atual. Ele finaliza a transação, tornando todas as modificações disponíveis para outros usuários e sessões.
Uso
A instrução `COMMIT` é normalmente usada após uma série de operações `INSERT`, `UPDATE` ou `DELETE` para garantir que as alterações sejam salvas no banco de dados. É essencial no gerenciamento de transações para garantir a integridade dos dados.
COMMIT;
Essa sintaxe confirma que todas as alterações na transação atual são salvas e não podem ser revertidas. Observe que `COMMIT` é aplicável somente em mecanismos de armazenamento que suportam transações, como o InnoDB. Não é aplicável em mecanismos de armazenamento não transacionais, como o MyISAM.
Exemplos
1. Compromisso básico de transação
START TRANSACTION;
INSERT INTO accounts (name, balance) VALUES ('John Doe', 1000);
COMMIT;
Neste exemplo, uma nova conta é adicionada e a alteração é salva com o uso de `COMMIT` para finalizar a transação.
2. Confirmação de várias alterações
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE name = 'John Doe';
UPDATE accounts SET balance = balance + 100 WHERE name = 'Jane Smith';
COMMIT;
Este exemplo transfere fundos entre duas contas. Ambas as atualizações são finalizadas em conjunto com um único `COMMIT`, garantindo a atomicidade.
3. Confirmação condicional com tratamento de erros
Para lidar com confirmações condicionais e detecção de erros, use a lógica do aplicativo ou procedimentos armazenados. Não há suporte para instruções `IF` diretas em scripts SQL. Aqui está um exemplo usando um procedimento armazenado:
DELIMITER //
CREATE PROCEDURE ConditionalCommit()
BEGIN
DECLARE order_exists INT;
START TRANSACTION;
DELETE FROM orders WHERE order_id = 101;
SELECT COUNT(*) INTO order_exists FROM orders WHERE order_id = 101;
IF order_exists = 0 THEN
COMMIT;
ELSE
ROLLBACK;
END IF;
END //
DELIMITER ;
Neste exemplo, um procedimento verifica se a exclusão da ordem foi bem-sucedida antes de confirmar.
Dicas e práticas recomendadas
- Emparelhe com `START TRANSACTION`. Use `COMMIT` com `START TRANSACTION` para garantir que as alterações façam parte de uma transação.
- Trate os erros com `ROLLBACK`. Reverta as alterações antes de confirmá-las em caso de erros.
- Garanta a consistência da transação e conclua todas as operações necessárias em uma transação antes de confirmá-la.
- Minimize a duração da transação para reduzir o bloqueio e melhorar o desempenho.
- Teste antes de se comprometer a verificar se todas as alterações atendem aos seus requisitos.
Nota adicional
A emissão de um `COMMIT` sem um `START TRANSACTION` anterior não tem efeito, pois não há alterações a serem finalizadas. Certifique-se sempre de que `START TRANSACTION` seja usado para iniciar uma transação.