Tanto en MySQL 5.7 como en MySQL 8, BEGIN
y END
es lo mismo que en T-SQL y representa una "declaración compuesta" también conocida como "un bloque de código", al igual que las llaves en 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
Sin embargo, el BEGIN
palabra clave también (confusamente) sobrecargado como un alias para BEGIN WORK
y START TRANSACTION
, y su semántica depende de si se usan dentro de un programa almacenado o no:
Entonces:
START TRANSACTION
- Siempre inicia una transacción. Debería preferir esta sintaxis.
BEGIN
:<último>- Si está en un Procedimiento Almacenado, Función, Desencadenador o Evento, entonces
BEGIN
por sí mismo marca el comienzo de una declaración compuesta. Solo puedes usarSTART TRANSACTION
para iniciar una transacción. - Si está ejecutando directamente SQL contra MySQL, esto también inicia una transacción (ya que se interpreta como
BEGIN WORK
). Pero es tonto y confuso usarlo de esta manera, así que evítelo.
BEGIN WORK
:<último> START TRANSACTION
. Evitaría usar esto por completo para evitar confusiones.