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.
- 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
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 nurSTART 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.
- Wenn Sie sich in einer gespeicherten Prozedur, Funktion, einem Trigger oder Ereignis befinden, dann
BEGIN WORK
:- Dies ist ein Alias für
START TRANSACTION
. Ich würde dies komplett vermeiden, um Verwirrung zu vermeiden.
- Dies ist ein Alias für