MySQL事务隐式提交

时间:2014-07-08 04:33:34

标签: mysql sql transactions

我开始使用MySQL trnsactions,我有一个疑问:

在文档中说:

  

开始交易会导致任何待处理的交易   承诺。请参见第13.3.3节“导致隐含的语句”   提交“,了解更多信息。

我在同一个Web应用程序上有或多或少的5个用户(它是一个本地测试应用程序),所有这些用户共享同一个MySQL用户与数据库进行交互。

我的问题是:如果我在代码中使用事务并且其中两个启动事务(因为插入,更新或其他东西),那么事务是否会相互干扰?

我在导致隐式提交的语句中看到包括启动事务。作为本地应用程序快速而难以判断是否存在错误,每个查询都按预期结束,但我仍有疑问。

2 个答案:

答案 0 :(得分:1)

默认情况下,使用MySQl,每个连接都已启用autocommit。也就是说,每个连接将立即提交每个查询。因此,对于InnoDb表,每个事务都是原子的 - 它完全完成且没有干扰。

对于需要多个操作的更新,您可以使用START TRANSACTION查询来使用事务。任何未完成的交易都将被提交,但这不会成为问题,因为大多数情况下它们都会被提交。

在收到COMMIT查询之前执行的所有更新都保证完全无干扰地完成,或者在ROLLBACK的情况下,不应用任何更新。

来自其他连接的其他转换会在此过程中看到数据库的一致视图。

此属性符合ACID(原子性,一致性,隔离性,耐久性)您应该可以使用InnoDB表。

其他表类型可能会实现不同级别的ACID合规性。如果您需要使用它,请仔细检查。

这是一个非常简化的事务处理视图。有关MySQL网站here的详细信息,您可以阅读有关ACID合规性的here

答案 1 :(得分:1)

隐式提交在会话中发生

因此,例如,您启动一​​个事务,执行一些更新,然后忘记关闭事务并启动一个新事务。然后第一笔交易将隐含承诺。

但是,与数据库的其他连接不会受到影响;他们有自己的交易。

你说5个用户使用相同的db用户。好的,可以。但是为了让它们执行单独的操作,它们不应该使用相同的连接/会话。