MyISAM | Innodb |
不支持 | 支持事务 |
不支持 | 支持外键 |
非聚簇索引 | 聚簇索引 |
只有表锁 | 支持行锁(默认)和表锁 |
b+树中间没有卫星数据,所以同样大小的磁盘页可以容纳更多元素
B-树在树里面的查询次数其实跟二叉树的次数是一样的,但是B+树的磁盘IO却减少了。
读锁 | 读锁是共享的,这时只能读不能写 |
写锁 | 写锁是排他的,它会阻塞其他的写锁和读锁 |
表锁 | 行锁 |
锁定整张表并且阻塞其他用户对该表的所有读写操作 |
行锁又可以分为乐观锁和悲观锁,悲观锁可以通过 for update实现,乐观锁则通过版本号实现。 |
原子性 | 一个事务中的操作要么全部成功,要么全部失败 |
隔离性 | 一个事务的修改在最终提交前,对其他事务是不可见的 |
一致性 | 数据库总是从一个一致性的状态转换到另外一个一致性的状态 |
持久性 | 一旦事务提交,所做的修改就会永久保存到数据库中 |
脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。(一个对数进行修改,但还没提交,此时另一个来读取);
不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。(强调修改);
幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。(在随后的查询中,第一个事务(T1)就会发现多了一些原本不存在的记录,就好像发生了幻觉一样,所以称为幻读。);
更新丢失:两个人一起提交修改,有一个必失败。
原文:https://www.cnblogs.com/carryup/p/13888572.html