Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

BEGIN...END vs START TRANSACTION...COMMIT


Tanto no MySQL 5.7 quanto no MySQL 8, BEGIN e END é o mesmo que em T-SQL e representa uma "instrução composta" também conhecida como "um bloco de código", assim como chaves em C, Java, C#, etc.

No entanto, o BEGIN palavra-chave também (confusamente) sobrecarregado como um alias para BEGIN WORK e START TRANSACTION , e sua semântica depende se eles estão sendo usados ​​dentro de um programa armazenado ou não:

Então:
  • START TRANSACTION
    • Sempre inicia uma transação. Você deve preferir esta sintaxe.
  • BEGIN :
    • Se você estiver em um Stored Procedure, Function, Trigger ou Event, então BEGIN por si só marca o início de uma instrução composta. Você só pode usar START TRANSACTION para iniciar uma transação.
    • Se você estiver executando diretamente o SQL no MySQL, isso também iniciará uma transação (já que é interpretado como BEGIN WORK ). Mas é bobo e confuso usá-lo dessa maneira, então evite.
  • BEGIN WORK :
    • Este é um alias para START TRANSACTION . Eu evitaria usar isso completamente para evitar confusão.