sql >> Database teknologi >  >> RDS >> Mysql

BEGYND...SLUT vs. START TRANSAKTION... FORPLIGT

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.

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 bruge START 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.
  • BEGIN WORK :
    • Dette er et alias for START TRANSACTION . Jeg ville helt undgå at bruge dette for at forhindre forvirring.



  1. Vælg N forrige og M næste elementer omkring det aktuelle element-id

  2. Bedre måde at strukturere en PL/SQL IF THEN-sætning på?

  3. Wordpress Søg i serier med metadata med tilpasset forespørgsel

  4. Bedste praksis for PHP/MySQL aftale/booking system