Innodb&MyISAM存储引擎介绍

存储结构

两者都是使用了B+树的存储结构,关于B树与B+树见 https://blog.csdn.net/qq_25940921/article/details/82224418

Innodb

存储文件包括:ibdata1和.frm文件
InnoDB中,创建的表的表结构存储在.frm文件中。数据和索引存储在innodb_data_home_dir和innodb_data_file_path定义的表空间中

在数据盘存放方式参考:https://blog.csdn.net/qq_33774822/article/details/99707029

隔离级别

锁: 表级锁以及行锁
隔离性会存在的问题:

    i、脏读:是指在一个事务处理过程里读取了另一个未提交的事务中的数据(当一个事务正在多次修改某个数据,而在这个事务中这多次的修改都还未提交,这时一个并发的事务来访问该数据,就会造成两个事务得到的数据不一致);(读取了另一个事务未提交的脏数据)
    
    ii、不可重复读:在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了;(读取了前一个事务提交的数据,查询的都是同一个数据项)
    
   iii、虚读(幻读):是事务非独立执行时发生的一种现象(eg:事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样)    

四种隔离级别:
a、Serializable(串行化):这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。;
b、Repeatable read(可重复读):这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题,参考https://blog.csdn.net/w2064004678/article/details/83012387
c、Read committed(读已提交):可避免脏读的发生;
d、Read uncommitted(读未提交):最低级别,任何情况都无法保证;
从a----d隔离级别由高到低,级别越高,执行效率越低

在MySQL中,实现了这四种隔离级别,分别有可能产生问题如下所示:
在这里插入图片描述

Mylsam

mylsam存储frm,myd以及myi三个文件
frm文件是所有存储引擎都会创建的,用来记录表结构。
MYD是来记录存储的数据。
MYI用来记录索引数据。

锁: 表级锁

mylsam与innodb区别:
在这里插入图片描述
mylsam查询比innodb快原因: https://blog.csdn.net/xmtblog/article/details/87941698

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值