innodb和myisam的区别

标题

innodb支持事物、支持行锁和表锁、在进行大量的update和insert操作时,使用innodb效率比较高,适用于多线程、多用户并发操作。
myisam不支持行锁,支持表锁,提供高速存储和检索,和全文的搜索能力,比较适合select操作。

myisam和innodb的索引

MyISAM和InnoDB都是使用B+Tree作为索引结构。
MyISAM叶节点的data域存放的是数据记录的地址,MyISAM的索引文件仅仅保存数据记录的地址,非聚集索引。
InnoDB数据文件本身就是索引文件,InnoDB的叶节点data域保存了完整的数据记录,也称为聚集索引。

事物

在计算机中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。例如对数据库中的人员进行删除,要删除这个人的基本信息,还要删除和这个人有关联的别的信息,这些操作整合在一起就是一个事物。
事物具有四个属性
原子性:一个事物,要么成功,要么失败,
一致性:事物执行后,在数据库中的状态要保持一致,如A向B转账,A转了过去,但是B却没有收到。就不符合一致性。
隔离性:事物的运行都是独立运行的,如果A事物运行,被B事物的结果影响,那么A事物将会撤回,在同一时间事物之间的操作不能互相影响。
持久性:事物一旦commit(提交)之后,在数据库中的状态就会发生永久性的改变。
MySql的事物
开启事物:start transaction
结束事物:commit(提交)或rollback(回滚)
事物产生的并发问题
脏读:一个事物读取到另一个事物未提交的数据。
不可重复读:一个事物两次读取的数据不一致。
幻读:对同一张表进行两次查询,一个事物读取到另一个事物已经提交的数据(另一个事物对该事物查询的数据进行了更改操作)。
四大隔离级别
读未提交(read uncommitted)
会发生脏读,不可重复读和幻读
读已提交(read committed)(Oracle)
解决了脏读,会产生不可重复读和幻读
可重复度 (repeatable read)(MySql)
解决了脏读和不可重复读,会产生幻读
可串行化 (serializable)
不会产生并发问题,是串行访问,不是并发访问,性能较差。

你可能感兴趣的:(innodb和myisam的区别)