没有"开始交易"的单个"提交"语句

Xia*_*ang 2 mysql transactions commit autocommit

我正在使用带有mysqldb适配器的web2py dal连接到mysql服务器.

我的问题:

  1. 为什么在" set autocommit = 0 " 之后需要单个" commit "而不引导" begin transaction "
  2. 如果autocommit = 0,"select"语句是否会开始一个事务?

服务器信息:innodb engine autocommit = 1(默认值)tx_isolation = repeatable-read(默认值)

general_log:

100356 10:00:00 123456 Connect  dummy@172.0.0.1 on dummydb
123456 Query    SET NAMES 'utf8'
123456 Query    SET AUTOCOMMIT = 0
123456 Query    COMMIT
123456 Query    SET FOREIGN_KEY_CHECKS=1
123456 Query    SET sql_mode='NO_BACKSLASH_ESCAPES'
Run Code Online (Sandbox Code Playgroud)

pau*_*sm4 7

呃...因为你禁用了自动提交????

这是一个很好的解释:

http://rpbouman.blogspot.com/2007/02/mysql-transactions-and-autocommit.html

启用自动提交后,每个语句都包含在自己的事务中.COMMIT成功执行语句后会发生错误,并且发生错误会中止事务,并回滚任何更改.

默认情况下,在MySQL中启用自动提交.

换一种说法:

  1. "事务"不一定只关于"将多个语句作为一个原子实体执行"

  2. autocommit为您提供一个声明== 1交易的"错觉"

  3. 事实上,"automcommit off"给你"一个声明== 0个交易"

来自同一链接:

...关闭自动提交的重点是你可以发出多个语句并立即提交它们.