教程集 www.jiaochengji.com
教程集 >  数据库  >  mysql  >  正文 有关 mysql innodb引擎的锁与事物

有关 mysql innodb引擎的锁与事物

发布时间:2015-10-20   编辑:jiaochengji.com
mysql innodb锁事物锁表原因分析。

mysql innodb锁事物锁表原因分析。

1 mysql 事物隔离级别简介

1.1 READ UNCOMMITED

SELECT的时候允许脏读,即SELECT会读取其他事务修改而还没有提交的数据。

 1.2 READ COMMITED

SELECT的时候无法重复读,即同一个事务中两次执行同样的查询语句,若在第一次与第二次查询之间时间段,其他事务又刚好修改了其查询的数据且提交了,则两次读到的数据不一致。

1.3 REPEATABLE READ

SELECT的时候可以重复读,即同一个事务中两次执行同样的查询语句,得到的数据始终都是一致的。

1.4 SERIALIZABLE

与可重复读的唯一区别是,默认把普通的SELECT语句改成SELECT …. LOCK IN SHARE MODE。即为查询语句涉及到的数据加上共享琐,阻塞其他事务修改真实数据。

2 开发过程中,我们一般使用的都是1.3 repeatable read,下面详细介绍一下这个隔离级别。

在同一个事物中,我们执行同一条查询SQL,得到的结果始终是一样的,无论别人进行添加、删除、修改等任何操作,对我的查询结果都没有影响;包括别人事物提交之后这个状况,对我的查询结果没有影响。

3 锁表的情况

3.1 事物一如下:
 

复制代码 代码如下:
SET @@autocommit= 0;
UPDATE test set name = 'changing' where id = 1;

3.2 事物二如下:
 

复制代码 代码如下:
SET @@autocommit= 0;
UPDATE test set name = 'chang' where id = 1;

先执行3.1,然后执行3.2.则3.2将无法执行,处于所等待状态,等待时间超过了某个值,报锁超时异常。这是因为3.1已经对id=1的这条记录加锁,3.2需要等待。

4 innodb并不总是锁行,也有锁表的情况。
 

复制代码 代码如下:
SET @@autocommit= 0;
UPDATE test set name = 'chang' where name like '%a%'

上面这条SQL,因为mysql不确定修改的范围,所以对全表加锁。

我的QQ:864157225,期待技术方面的交流。

您可能感兴趣的文章:
mysql更改表引擎INNODB为MyISAM的方法总结
修改mysql默认存储引擎的方法
mysql innodb优化配置方法分享
有关 mysql innodb引擎的锁与事物
详解mysql 锁表 for update (引擎/事务)
mysql innodb数据库引擎解析
mysql数据库中MyISAM与InnoDB区别及性能详谈
mysql innodb数据库批量转换表引擎为MyISAM的方法
深入分析MySQL更新死锁问题
MyISAM和InnoDB区别

关键词: mysql事务  mysql锁表  mysql锁定表   
[关闭]
~ ~