数据库
数据库的隔离级别:
1.未提交读:读到其它事务未提交的数据
2.已提交读:读到其他事务已经提交的数据
3.可重复读:同一事务内的查询都是与事务开始时刻一致的
3.可串行化:每次读都获取表即共享锁,读写锁互斥
Oracle默认的是已提交读:
innodb相关部分:
innodb默认的是可重复读,但是为了降低频繁加锁给数据库性能带来的消耗,innodb采用多版本并发控制(MVCC)来提高数据库的性能
innode在每行数据的末尾隐藏式地添加了两个记录:一个记录这行数据何时被创建,一个记录这行数据何时被删除,虽然需要增加额外的存储空间,
但是可以减少锁的使用。一个事务SELECT的时候只会查询出创建版本号小或等于当前版本号,删除版本号大或等于当前版本号的数据。
innodb与myisam的区别与共同点:
共同点:
innodb和myisam都是基于B+树来索引的。
区别:
1.innodb支持事务,myisam不支持事务。
2.innodb既有表锁,又有行锁,但是如果innodb在执行SQL语句时where条件不是没有建立索引的话,innodb也会锁全表,myisam只有表级锁
innodb的并发性能要强与myisam
3.innodb支持外键,myisam不支持
4.innodb支持外键,myisam不支持外键
5.myisam用一个变量保存了表的行数,而innodb没有保存,所以在执行select coun(*) from table的时候myisam很快,而innodb则需要扫描全表
6.myisam的查询比innodb的查询效率更高,innodb要支持MVVC多版本并发控制,要检查和维护
应用场景:
mysiam适合查询比较频繁的情况
innodb适合支持事务,环境复杂的应用场景