锁模块的常见问题
1、MyISAM和InnoDB关于锁方面的区别是什么?
2、数据库事务的四大特性?
3、事务隔离级别以及各级别下的并发访问问题?
4、InnoDB可重复读隔离级别下如何避免幻读?
5、RC、RR级别下的InnoDB的非阻塞读如何实现?
1、MyISAM和InnoDB关于锁方面的区别是什么?
MyISAM默认用的是表级锁,不支持行级锁
InnoDB默认用的是行级锁,也支持表级锁
2、数据库事务的四大特性?
ACID
原子性(Atomic)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)
3、事务隔离级别以及各级别下的并发访问问题?
事务并发访问引起的问题以及如何避免
1) 更新丢失----mysql所有事务隔离级别在数据库层面上均可避免
如下图,对同一个账号进行操作
2) 脏读----READ-COMMITED 事务隔离级别以上可避免
查看全局和当前session的事务隔离级别
SELECT @@GLOBAL.tx_isolation, @@tx_isolation;
查询事务的隔离级别
SELECT @@tx_isolation;
设置事务的隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
3) 不可重复读----REPEATABLE-READ 事务隔离级别以上可避免
4)幻读----SERIALIZABLE 事务隔离级别可避免
4、InnoDB可重复读隔离级别下如何避免幻读?
表象: 快照读(非阻塞读) -- 伪MVCC
内在:next-key锁(行锁+ gap锁)
当前读和快照读
当前读: select... lock in share mode, select ... for update
update, delete, insert
快照读:不加锁的非阻塞读, select
5、RC、RR级别下的InnoDB的非阻塞读如何实现?
作者:Work Hard Work Smart
出处:http://www.cnblogs.com/linlf03/
欢迎任何形式的转载,未经作者同意,请保留此段声明!