sql >> Base de Datos >  >> RDS >> Mysql

COMENZAR... FIN vs INICIAR TRANSACCIÓN... COMPROMETER

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.

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 usar START 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>
  • Este es un alias para START TRANSACTION . Evitaría usar esto por completo para evitar confusiones.