I både MySQL 5.7 och MySQL 8, BEGIN
och END
är samma som i T-SQL och representerar en "sammansatt sats" även känd som "ett kodblock", precis som hängslen i C, Java, C#, etc.
- 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
Men BEGIN
sökord är också (förvirrande) överbelastad som ett alias för BEGIN WORK
och START TRANSACTION
, och deras semantik beror på om de används i ett lagrat program eller inte:
Så:
START TRANSACTION
- Startar alltid en transaktion. Du bör föredra denna syntax.
BEGIN
:- Om du befinner dig i en lagrad procedur, funktion, trigger eller händelse,
BEGIN
i sig markerar början på ett sammansatt uttalande. Du kan bara användaSTART TRANSACTION
för att starta en transaktion. - Om du kör SQL direkt mot MySQL, startar detta också en transaktion (som det tolkas som
BEGIN WORK
). Men det är dumt och förvirrande att använda det på det här sättet, så undvik det.
- Om du befinner dig i en lagrad procedur, funktion, trigger eller händelse,
BEGIN WORK
:- Detta är ett alias för
START TRANSACTION
. Jag skulle undvika att använda detta helt för att förhindra förvirring.
- Detta är ett alias för