I både MySQL 5.7 og MySQL 8, BEGIN
og END
er det samme som i T-SQL og repræsenterer en "sammensat sætning", også kendt som "en kodeblok", ligesom krøllede parenteser i C, Java, C# osv.
- 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/da/begin-end.html
Men BEGIN
søgeord er også (forvirrende) overbelastet som et alias for BEGIN WORK
og START TRANSACTION
, og deres semantik afhænger af, om de bliver brugt i et lagret program eller ej:
Så:
START TRANSACTION
- Starter altid en transaktion. Du bør foretrække denne syntaks.
BEGIN
:- Hvis du er i en lagret procedure, funktion, trigger eller hændelse, så
BEGIN
i sig selv markerer starten på en sammensat erklæring. Du kan kun brugeSTART TRANSACTION
for at starte en transaktion. - Hvis du udfører SQL direkte mod MySQL, starter dette også en transaktion (som det tolkes som
BEGIN WORK
). Men det er dumt og forvirrende at bruge det på denne måde, så undgå det.
- Hvis du er i en lagret procedure, funktion, trigger eller hændelse, så
BEGIN WORK
:- Dette er et alias for
START TRANSACTION
. Jeg ville helt undgå at bruge dette for at forhindre forvirring.
- Dette er et alias for