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,
BEGINi sig markerar början på ett sammansatt uttalande. Du kan bara användaSTART TRANSACTIONfö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