-2

请问mysql中的事务隔离是什么,它的优势,因为我开始对它进行一些研究,但我仍然需要更多的解释。这就是解决问题的方法

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

1 回答 1

1

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

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

如果您将隔离级别设置为REPEATABLE READ(默认),这意味着您的事务读取数据,因为它在您开始事务的那一刻就存在。只有当您完成该事务并开始另一个事务时,您才能在 SELECT 时看到更新的数据。

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

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

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

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

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

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

于 2014-07-08T00:43:07.053 回答