Mysql
 sql >> Base de données >  >> RDS >> Mysql

COMMENCEZ... FIN vs COMMENCEZ LA TRANSACTION... COMMIT

Dans MySQL 5.7 et MySQL 8, BEGIN et END est le même que dans T-SQL et représente une "instruction composée" également connue sous le nom de "bloc de code", tout comme les accolades en C, Java, C#, etc.

Cependant, le BEGIN le mot-clé est également (de manière confuse) surchargé en tant qu'alias pour BEGIN WORK et START TRANSACTION , et leur sémantique dépend de s'ils sont utilisés ou non dans un programme stocké :

Donc :

  • START TRANSACTION
    • Commence toujours une transaction. Vous devriez préférer cette syntaxe.
  • BEGIN :
    • Si vous êtes dans une procédure stockée, une fonction, un déclencheur ou un événement, alors BEGIN marque à lui seul le début d'une instruction composée. Vous ne pouvez utiliser que START TRANSACTION pour démarrer une transaction.
    • Si vous exécutez directement SQL sur MySQL, cela démarre également une transaction (car elle est interprétée comme BEGIN WORK ). Mais c'est idiot et déroutant de l'utiliser de cette façon, alors évitez-le.
  • BEGIN WORK :
    • Ceci est un alias pour START TRANSACTION . J'éviterais complètement de l'utiliser pour éviter toute confusion.