Mysql
 sql >> Datenbank >  >> RDS >> Mysql

BEGIN...END vs START TRANSACTION...COMMIT

Sowohl in MySQL 5.7 als auch in MySQL 8, BEGIN und END ist dasselbe wie in T-SQL und stellt eine "zusammengesetzte Anweisung" dar, die auch als "Codeblock" bekannt ist, genau wie geschweifte Klammern in C, Java, C# usw.

Aber der BEGIN Schlüsselwort ist auch (verwirrenderweise) als Alias ​​für BEGIN WORK überladen und START TRANSACTION , und ihre Semantik hängt davon ab, ob sie in einem gespeicherten Programm verwendet werden oder nicht:

Also:

  • START TRANSACTION
    • Startet immer eine Transaktion. Sie sollten diese Syntax bevorzugen.
  • BEGIN :
    • Wenn Sie sich in einer gespeicherten Prozedur, Funktion, einem Trigger oder Ereignis befinden, dann BEGIN an sich markiert den Beginn einer zusammengesetzten Anweisung. Sie können nur START TRANSACTION verwenden um eine Transaktion zu starten.
    • Wenn Sie SQL direkt gegen MySQL ausführen, startet dies auch eine Transaktion (wie es als BEGIN WORK interpretiert wird ). Aber es ist albern und verwirrend, es auf diese Weise zu verwenden, also vermeide es.
  • BEGIN WORK :
    • Dies ist ein Alias ​​für START TRANSACTION . Ich würde dies komplett vermeiden, um Verwirrung zu vermeiden.