sql >> Database >  >> RDS >> Mysql

BEGIN...END vs START TRANSACTIE... COMMIT

In zowel MySQL 5.7 als MySQL 8, BEGIN en END is hetzelfde als in T-SQL en vertegenwoordigt een "samengestelde instructie" ook bekend als "een codeblok", net als accolades in C, Java, C#, enz.

De BEGIN zoekwoord is ook (verwarrend) overbelast als alias voor BEGIN WORK en START TRANSACTION , en hun semantiek hangt af van of ze in een opgeslagen programma worden gebruikt of niet:

Dus:

  • START TRANSACTION
    • Start altijd een transactie. U zou deze syntaxis moeten prefereren.
  • BEGIN :
    • Als u zich in een opgeslagen procedure, functie, trigger of gebeurtenis bevindt, BEGIN op zichzelf markeert het begin van een samengestelde instructie. U kunt alleen START TRANSACTION . gebruiken om een ​​transactie te starten.
    • Als je SQL rechtstreeks uitvoert tegen MySQL, dan start dit ook een transactie (zoals het wordt geïnterpreteerd als BEGIN WORK ). Maar het is dwaas en verwarrend om het op deze manier te gebruiken, dus vermijd het.
  • BEGIN WORK :
    • Dit is een alias voor START TRANSACTION . Ik zou dit volledig vermijden om verwarring te voorkomen.



  1. Aangepaste gelijkheidsoperator maken voor PostgreSQL-type (punt) voor DISTINCT-aanroepen

  2. dynamische tabelnaam in select-statement

  3. Een Unix-tijdstempel converteren naar een datum/tijd-waarde in SQL Server

  4. MVC3 Alleen-lezen MySql-verbindingsreeks