开始...结束vs开始交易...提交

时间:2020-06-27 19:44:16

标签: mysql

做之间有什么区别

START TRANSACTION
...
COMMIT

或这样做:

BEGIN
...
END

以后会自动提交吗,还是使用另一个自动提交的实际示例?

1 个答案:

答案 0 :(得分:2)

在MySQL 5.7和MySQL 8中,BEGINEND与T-SQL中的相同,代表“复合语句”,也称为“代码块”,就像卷曲-C,Java,C#等中的花括号。

However, the BEGIN keyword is also (confusingly) overloaded as an alias for BEGIN WORK and START TRANSACTION,其语义取决于是否在存储程序内部使用它们:

在所有存储的程序(存储的过程和函数,触发器和事件)中,解析器将BEGIN [WORK]视为BEGIN ... END块的开始。在这种情况下,请改用START TRANSACTION开始交易。

所以:

  • START TRANSACTION
    • 始终开始交易。您应该更喜欢这种语法。
  • BEGIN
    • 如果您处于存储过程,函数,触发器或事件中,那么BEGIN本身就标志着复合语句的开始。您只能使用START TRANSACTION来开始交易。
    • 如果您要直接针对MySQL执行SQL,那么这还将启动一个事务(因为它被解释为BEGIN WORK)。但是以这种方式使用它是愚蠢且令人困惑的,因此请避免使用它。
  • BEGIN WORK
    • 这是START TRANSACTION的别名。我会避免完全使用它来防止混乱。