什么是mysql中的事务隔离我需要更多的解释

时间:2014-07-08 00:26:01

标签: mysql transaction-isolation

请问mysql中的事务隔离是什么,它有利,因为我开始对它进行一些研究,但我还需要更多的解释。 这就是得到它

SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL
  {
       REPEATABLE READ
     | READ COMMITTED
     | READ UNCOMMITTED
     | SERIALIZABLE
   }

1 个答案:

答案 0 :(得分:1)

事务隔离控制当前会话是否看到更新,因为其他会话正在同时更改数据。

例如,如果启动事务,您可能希望在完成事务之前查看数据库的稳定视图。如果您在几分钟内运行多个报告类型查询,并且您希望数字匹配,即使基础数据正在发生变化,这也很重要。

如果将隔离级别设置为REPEATABLE READ(默认值),则表示您的事务会在您启动事务的瞬间读取数据。只有当您完成该事务并启动另一个事务时,您才能在SELECT时看到更新的数据。

这意味着MySQL必须保留同一行的多个副本,并跟踪哪个事务可以查看哪个版本。

如果让事务全天运行,则意味着无法从数据库中清除旧版本的更新行,因为长时间运行的事务可能需要查看它们

如果您将隔离级别设置为READ COMMITTED,那么当其他人对数据进行更改时,您对数据的“查看”包括下次执行SELECT时的更改。这很好,因为可以立即清除旧版本的行。

为了标准,支持

READ UNCOMMITTED,但几乎没有理由使用它。这意味着您可以在提交之前查看其他会话中的更改。通过类比,在我点击“发布你的答案”之前,你可以在我输入时阅读我的​​帖子。这不是一个非常有用的技巧,因为你可以选择并查看一些更新,然后它们就会消失,因为该用户决定回滚。

SERIALIZABLE也支持标准,不经常使用。此模式意味着如果您选择SELECT,那么您的事务会隐式锁定您在共享模式下选择的行,即多个人可以同时选择相同的行而不会发生冲突,但如果任何一个会话具有该类型的锁,则没有人可以更新或删除这些行。

您应该阅读http://dev.mysql.com/doc/refman/5.6/en/set-transaction.html了解更多详情。