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. - MySQL 5.7:https://dev.mysql .com/doc/refman/5.7/en/begin-end.html
- MySQL 8.0:https://dev.mysql .com/doc/refman/8.0/en/begin-end.html
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
BEGINpor si só marca o início de uma instrução composta. Você só pode usarSTART TRANSACTIONpara 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.
- Se você estiver em um Stored Procedure, Function, Trigger ou Event, então
BEGIN WORK:- Este é um alias para
START TRANSACTION. Eu evitaria usar isso completamente para evitar confusão.
- Este é um alias para