Chinaunix首页 | 论坛 | 博客
  • 博客访问: 79563
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 340
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-02 20:25
文章分类

全部博文(31)

文章存档

2015年(2)

2014年(29)

我的朋友

分类: Mysql/postgreSQL

2014-08-29 17:44:56

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过滤后立即释放(行锁)




阅读(916) | 评论(0) | 转发(0) |
0

上一篇:6. 表设计

下一篇:8. 小总结

给主人留下些什么吧!~~