思路话语

。Arlen:思想有多远你就能走多远...

innodb各隔离级别下对select是否自动加锁?

InnoDB 在 READ-UNCOMMITTED、READ-COMMITTED 和 REPEATABLE-READ 级别中,未明确加锁的 SELECT 语句都使用“持续非锁定读”的查询方式,这种方式下,查询语句不对读取的表加任何锁。在事务内看到的是事务开始时刻前,所有已经提交的事务的结果的快照 (利用多版本的方式)。

而在 SERIALIZABLE 级别,未明确加锁的 SELECT 语句被隐式转换为 SELECT … LOCK IN SHARE MODE

 

from:http://phpoo.com/?action-viewnews-itemid-92

概述

面向PHPI g } z#r�~UKf

本文会简单介绍 Mysql 使用的支持事务的存储引擎 InnoDB 的隔离级别,以及每个隔离级别下回产生的并发问题。同时为了更加深刻的理解 InnoDB 引擎的隔离级别,还会探讨如何通过加锁解决不同隔离级别下的并发问题。本文使用的实验环境是 mysql-5.1.33-win32,其他版本的 MySQL 可能会有不同。

$O k9wNCk@o0

隔离级别标准

SQL 标准中定义了四个隔离级别,他们分别是:

READ-UNCOMMITTED
读未提交
READ-COMMITTED
读提交
REPEATABLE-READ
可重复读
SERIALIZABLE
串行化

在 InnoDB 中根据 SQL:1992 事务隔离级别,使用 REPEATABLE-READ 作为默认隔离级别。

并发产生的问题

为了说明下面的并发问题, 首先建立一个表 foobar:

DROP TABLE IF EXISTS `foobar`;
 

posted on 2010-06-10 19:37  Arlen  阅读(779)  评论(0编辑  收藏  举报

导航