1. innodb支持事务,myisam不支持
2. 采用MVCC实现
3. commit将操作写入日志文件(磁盘IO)来保证持久性(D)
4. 预写式日志(WAL)保证原子性(A)
5. MVCC(多版本并发控制)+GAP(位置锁)实现隔离性(I)
6. 一致性(C)是?????,如何实现???
7. 脏读:一个事务读到未提交的数据
8. 不可重复读:一个事务两次相同的读操作结果不同(自身未对这部分数据进行修改)
9. 幻读:范围读的时候,数据集合大小发生变化
10. update delete insert排他锁,select默认不加锁,for update共享锁
11. 一个事务锁的释放应该在commit后,否则无法保证并发安全
12.select不加锁,属于快照读(读当前事务版本)MVCC
13.RU(read uncommitted):脏读,不可重复读,幻读
14.RC(read committed):不可重复读,幻读
15.RR (Repeatable read)默认:标准版本存在幻读,mysql通过mvcc+gap解决,该级别下不存在幻读(据说是确定的),校验结果只保证避免。
开两个session校验:tab(id)
1. begin 2. begin
3. select * from tab 4. insert into tab select 1
6. select * from tab 5. commit
7. commit
8. select * from tab
可看到t=3,6结果一致。
16. Serializable:事务一个接一个执行,啥问题没有,就是性能太差。
17. innodb行锁,select * from tab where col = ?
col(主键):锁住聚集索引col=?
col(唯一): 锁住索引col,以及col对应的一个聚集索引的值
col(非唯一):锁住索引col,以及col对应的多个聚集索引的值
col(非索引):聚集索引全锁(锁表),where过滤后立即释放(行锁)
阅读(964) | 评论(0) | 转发(0) |