读写锁
读锁:共享锁,写锁:排他锁
一个写锁会阻塞其他的写锁和读锁
锁粒度:
不同的引擎支持不同的锁机制
行锁(InnoDB)
开销大,加锁慢,粒度小。会出现死锁,发生锁竞争概率最低,并发读最高,性能高。
页锁(BDB)
开销和加锁速度介于表锁和行锁之间,锁定一页数据,会出现死锁。
表锁(MylSAM/MEMORY)
不会出现死锁,开销最小,加锁速度最快,锁整表,粒度大。发生锁竞争概率最高。性能最差。
什么时候要拿/写这个数据什么时候就上锁
隔离级别----》针对的是当前session
未提交读:事务的修改即使没有提交,其他事务也是可见的
已提交读(Oracle默认):事务从开始到提交之前,所做的任何修改对其他事物是不可见的
A事务开启-->查询结果1,2,3-->删除3--->提交
B事务开启-->查询结果1,2,3-->不操作-->查询得到结果1,2
B事务在自己的一个事务中两次查询结果不一样,受其他事务影响
可重复读(MySQL默认):同一事务多次读取同样的记录结果是一致的
A事务开启-->查询结果1,2,3-->删除3--->提交
B事务开启-->查询结果1,2,3-->不操作-->查询得到结果1,2,3
B事务在自己的一个事务中两次查询结果一样,不受其他事务影响
序列化:事务串行执行