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
BEGIN
por si só marca o início de uma instrução composta. Você só pode usarSTART 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.
- 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