赞
踩
1.mysql四事务隔离级别
read uncommitted(未提交读):在read uncommitted级别,事务中的修改,即使没有提交,对其他事务也都是可见的。性能上不比其他的级别好很多,并且会导致很多问题的产生,实际中很少使用。
read committed(提交读/不可重复读):一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的。
repeatbale read(可重复读):mysql默认隔离级别,在同一个事务中多次读取同样记录的结果是一致的。可能会造成幻读,但结合MVCC可以解决幻读问题。
serializable(可串行化):最高的隔离级别,在读取的每一行数据上都加锁,导致大量的超时和的锁争用的问题,实际很少用
2.不同事务级别产生的影响
隔离级别 | 脏读 | 不可重复读 | 幻读 | 加锁读 |
---|---|---|---|---|
read uncommitted | √ | √ | √ | × |
read committed | × | √ | √ | × |
repeatbale read | × | × | √ | × |
serializable | × | × | × | √ |
## 查看事务日志是否开启
## mysql默认采用自动提交模式。如果不是显式地开始一个事务,则每个查询都被当做一个事务执行提交操作。
show variables like 'autocommit';
## 设置当前会话事务日志隔离级别
set transaction isolation level read committed;
## 查看当前默认隔离级别
select @@tx_isolation;
3.mysql的锁
a.根据不同方式进行分类:
1)加锁机制:乐视和悲观
2)兼容性:共享和排他
3)锁粒度:表锁,页锁,行锁
4)锁模式:记录锁,gap锁,next-key锁,意向锁,插入意向锁
b.锁概念解析:
c.间隙锁介绍:
间隙锁:
Gap Locks
Next-Key锁
4.innodb的意向锁
5.锁共存的逻辑关系
共享锁 | 排他锁 | 意向共享锁 | 意向排他锁 | |
---|---|---|---|---|
共享锁 | 兼容 | 冲突 | 兼容 | 冲突 |
排他锁 | 冲突 | 冲突 | 冲突 | 冲突 |
意向共享锁 | 兼容 | 冲突 | 兼容 | 兼容 |
意向排他锁 | 冲突 | 冲突 | 兼容 | 兼容 |
1.InnoDB目前处理死锁的方法是将持有最少行级排他锁的事务进行回滚。
2.InnoDB采用的是两阶段锁定协议(two-phase locking protocol):在事务执行过程中,随时都可以执行锁定,锁只有的再执行commit或者rollback时才会释放,并且是所有的锁在同一时刻被释放。InnoDB会根据隔离级别在需要的时候自动加锁。
注意:除了事务中禁用了autocommit可以使用lock tables外,其他任何时候都不要显式地执行lock tables,不管使用的是什么存储引擎。
##显式锁定
select … lock in share mode
select … for update
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。