Mysql
 sql >> Database >  >> RDS >> Mysql

INIZIO... FINE vs INIZIA TRANSAZIONE... IMPEGNA

Sia in MySQL 5.7 che in MySQL 8, BEGIN e END è lo stesso di T-SQL e rappresenta una "istruzione composta" nota anche come "blocco di codice", proprio come le parentesi graffe in C, Java, C#, ecc.

Tuttavia, il BEGIN la parola chiave è anche (in modo confuso) sovraccaricato come alias per BEGIN WORK e START TRANSACTION e la loro semantica dipende dal fatto che vengano utilizzati all'interno di un programma memorizzato o meno:

Quindi:

  • START TRANSACTION
    • Avvia sempre una transazione. Dovresti preferire questa sintassi.
  • BEGIN :
    • Se sei in una stored procedure, una funzione, un trigger o un evento, allora BEGIN di per sé segna l'inizio di un'istruzione composta. Puoi utilizzare solo START TRANSACTION per avviare una transazione.
    • Se stai eseguendo direttamente SQL su MySQL, anche questo avvia una transazione (poiché viene interpretato come BEGIN WORK ). Ma è sciocco e confuso usarlo in questo modo, quindi evitalo.
  • BEGIN WORK :
    • Questo è un alias per START TRANSACTION . Eviterei di usarlo completamente per evitare confusione.