我从MySQL的策略开始,我有一个疑问:
文件中说:
启动事务会导致提交任何挂起的事务。有关更多信息,请参见第13.3.3节“导致隐式提交的语句”。
我在同一个web应用程序上有大约5个用户(这是一个用于测试的本地应用程序),他们都共享相同的MySQL用户来与数据库进行交互。
我的问题是:如果我在代码中使用事务,其中两个事务启动一个事务(因为插入、更新或其他原因),会不会是事务相互干扰?
我在导致隐式提交的语句中看到,它包括启动事务。作为一个本地应用程序,很难快速判断那里是否有问题,每个查询结果都与预期的一样,但我仍然有疑问。
发布于 2014-07-08 06:23:44
隐式提交发生在会话中。
例如,启动一个事务,进行一些更新,然后忘记关闭事务并启动一个新事务。然后,第一个事务将隐含地提交。
但是,到数据库的其他连接不会受此影响;它们有自己的事务。
您说有5个用户使用相同的db用户。这没什么。但是,为了让它们执行单独的操作,它们不应该使用相同的连接/会话。
发布于 2014-07-08 04:42:21
默认情况下,对于MySQl,每个连接都打开了autocommit。也就是说,每个连接将立即提交每个查询。因此,对于一个InnoDb表,每个事务都是原子的--它完全完成,不受干扰。
对于需要多个操作的更新,可以使用START TRANSACTION查询来使用事务。任何未完成的事务都将提交,但这不会是一个问题,因为大多数情况下,它们都将被提交。
在接收到COMMIT查询之前执行的所有更新都保证完全不受干扰地完成,或者,如果是ROLLBACK,则不应用任何更新。
其他连接的其他传输会在此过程中看到数据库的一致视图。
此属性符合酸性(原子性、一致性、隔离性、持久性),您应该可以使用InnoDB表。
其他表类型可能实现不同级别的酸依从性。如果你需要使用它,你应该仔细检查它。
https://stackoverflow.com/questions/24623786
复制相似问题