【发布时间】:2020-06-27 19:44:16
【问题描述】:
做有什么区别:
START TRANSACTION
...
COMMIT
或者在做:
BEGIN
...
END
以后是否自动提交,或者可能是使用其中一个的实际示例?
【问题讨论】:
-
你用的是什么版本的 MySQL?
-
版本是....5.7
标签: mysql
做有什么区别:
START TRANSACTION
...
COMMIT
或者在做:
BEGIN
...
END
以后是否自动提交,或者可能是使用其中一个的实际示例?
【问题讨论】:
标签: mysql
在 MySQL 5.7 和 MySQL 8 中,BEGIN 和 END 与 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 开始交易。BEGIN WORK)。但是以这种方式使用它既愚蠢又令人困惑,因此请避免使用它。BEGIN WORK:
START TRANSACTION 的别名。我会完全避免使用它以防止混淆。【讨论】:
begin...end似乎有真正的用途?但是对于 mysql5.7,我也可以将其排除在外,并在需要类似的东西时使用开始/结束转换,对吗?
... BEGIN ... START TRANSACTION ... COMMIT ... END... ?我的意思是在BEGIN ...END 内进行交易