mysql innodb引擎的锁与事物
2013-01-07 11:58
246 查看
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不确定修改的范围,所以对全表加锁。
864157225,渴望技术方面的交流。
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不确定修改的范围,所以对全表加锁。
864157225,渴望技术方面的交流。
相关文章推荐
- mysql引擎从MYSIAM型修改成INNODB类型后事物回滚无效
- MySQLInnoDB引擎事物隔离级别RC和RR
- mysql innodb引擎 关于分区表的bug
- MySQL存储引擎之InnoDB
- mysql innodb 引擎 key - 和 Primary key的区别 以及 索引的用法总结
- MySQL存储引擎之Myisam和Innodb总结
- MySQL 数据库 InnoDB引擎的插值问题
- MySQL存储引擎--MyISAM与InnoDB区别
- MySQL不支持InnoDB存储引擎解决方法
- mysql的innodb存储引擎(一)
- mysql的innodb存储引擎(二)
- MySQL中InnoDB存储引擎的锁的基本使用教程
- MySQL存储引擎中MyISAM和InnoDB区别详解
- Mysql 存储引擎中InnoDB与Myisam的主要区别
- MySql中启用InnoDB数据引擎的方法
- MySQL5.6版本InnoDB存储引擎在线DDL变更的官方信息中文翻译版
- CentOS上的安装和配置MYSQL 支持 INNODB引擎
- Mysql存储引擎中InnoDB与Myisam的主要区别
- MySQL存储引擎中的MyISAM和InnoDB
- Linux环境编译安装Mysql以及补装innodb引擎方法