请问mysql中的事务隔离是什么,它的优势,因为我开始对它进行一些研究,但我仍然需要更多的解释。这就是解决问题的方法
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL
{
REPEATABLE READ
| READ COMMITTED
| READ UNCOMMITTED
| SERIALIZABLE
}
请问mysql中的事务隔离是什么,它的优势,因为我开始对它进行一些研究,但我仍然需要更多的解释。这就是解决问题的方法
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL
{
REPEATABLE READ
| READ COMMITTED
| READ UNCOMMITTED
| SERIALIZABLE
}
事务隔离控制当前会话是否在其他会话同时更改数据时看到更新。
例如,如果您开始一个事务,您可能希望在完成事务之前看到一个稳定的数据库视图。如果您在几分钟内运行多个报告类型的查询,并且您希望数字匹配,即使基础数据正在更改,这可能很重要。
如果您将隔离级别设置为REPEATABLE READ
(默认),这意味着您的事务读取数据,因为它在您开始事务的那一刻就存在。只有当您完成该事务并开始另一个事务时,您才能在 SELECT 时看到更新的数据。
这意味着 MySQL 必须保留同一行的多个副本,并跟踪哪些事务可以看到哪些版本。
如果您让事务整天运行,则意味着无法从数据库中清除旧版本的更新行,因为您的长时间运行的事务可能需要查看它们
如果您将隔离级别设置为READ COMMITTED
,那么当其他人对数据进行更改时,您的数据“视图”会在您下次执行 SELECT 时包含这些更改。这很好,因为可以立即清除旧版本的行。
READ UNCOMMITTED
为了标准而支持,但几乎没有理由使用它。这意味着您可以在其他会话提交之前看到它们的更改。以此类推,在我点击“发布您的答案”之前,您可以在我打字时阅读我的帖子。这不是一个非常有用的技巧,因为您可以选择并查看一些更新,然后它们会消失,因为该用户决定回滚。
SERIALIZABLE
也是为了标准而支持的,不经常使用。这种模式意味着如果你选择,那么你的事务会隐式锁定你在共享模式下选择的行,即多个人可以同时选择相同的行而不会发生冲突,但是如果任何一个会话具有这种类型的锁,那么没有人可以更新或删除那些行。
您应该阅读http://dev.mysql.com/doc/refman/5.6/en/set-transaction.html了解更多详情。