mysql学习总结(一)

我不知道别人是怎么一个学习的流程,但是身为自学者(穷人),目前也只能东戳一下,西戳一下。

先总结一下表类型吧。

看了好多资料一切的一切都要从mysql 5.7 5.8版本开始划分吧

我记最初用mysql的表类型都还是MyISAM ,不为别的就因为它是默认的,还有在学校里老师是这样教的,还有确实效率高(快)。

先说mysql表划分吧。  InnoDB 和 MyISAM 两种表类型。

先说优缺点:

InnoDB 具有事务(划重点,小本本要记得,考试要考的,面试百分之最大值要面的),按照ACID这四个原则,I 代表的隔离性主要就是体现在事务的使用上。

事务的四种隔离级别:

1.未提交读(read uncommitted) :脏读(dirty read)产生的原因,一个事务可以读取另一个事务未提交的修改后的数据 (这一级别最差,因为兼容 脏读 非重复读 幻读)

2.提交读(read committed):在第一级别上的进步,防止了脏读,但是终究还是拦不住 非重复读和幻读

3.重复读(repeatable read)(mysql 默认 我在8上查到的): 在第二级别上的加强,就是为了防止重复读,这一级别下,在一个事务中,该事务在开启那一刻,该事务就进入了一个快照的环境中,在提交(commit)前的一切操作都不会影响到原来的数据,当一张表同时开启多事务下,先提交的事务要等待其他事务进行提交,只有当所有事务都提交了才会最终进行表数据的改变。(这里也是一个注意点,毕竟事务是一直等待的状态,mysql还是有处理机制的)又因为事务提交分先后,就会产生幻读(当你多次查询,数据会因为其他事务的顺序提交而导致你现在看到的数据和之前的数据不一样)

4.串行读(serializable):最高级别当然就避免以上所有的漏洞。

MyISAM 不支持事务(很简答),所以相比之下MyISAM可以说是简陋,就像Redis和MemCache的关系,所以MyISAM具备高速存储和检索,以及全文搜索的功能。所以需要支持大量select(查询的)的,MyISAM是更好的选择。(这里可以研究一下mysql表的底层)

综上所述:性能

那么InnoDB则是更偏重与大量的insert / update的操作,这个更符合当前直面用户的开发。

那么第二点:锁机制

mysql支持三种锁机制:行锁 表锁 页面锁(取了折衷的页级,一次锁定相邻的一组记录,这个我貌似都没见过说是引擎是BDB,没见过,有了解的可以百度)

InnoDB 支持行锁,表锁

MyISAM 只支持表锁

怎么样简单粗暴吧??锁太多了我打算单独列一个

第三点:存储

不知道用什么形容词了(我这辈子所有的语文老师请原谅我),该说是方式不同还是存储的格式不同,还是什么,反正就是不一样(详情百度)

第四点:索引(又一个重点小本本)

InnoDB(索引组织表)MyISAM(堆组织索引)

没记错的话,你能叫的出来名字的InnoDB都有,MyISAM只有非聚簇索引,毕竟不是连续存储的(随机存储非顺序存储),一点不同的是B+树的是使用(也可能不光只有这一点)

InnoDB使用B+树时,叶子节点保存的是完整的数据,而MyISAM则保存的是 data域保存数据记录的地址(划重点:是存储地址),因此两者又一个重大区别,InnoDB的数据文件就是索引文件,而MyISAM的索引文件和数据文件是分开的。

图片来源:https://www.kancloud.cn/kancloud/theory-of-mysql-index/41850

https://www.kancloud.cn/kancloud/theory-of-mysql-index/41852

除了上述意外,还有的不同是InnoDB的辅助索引data域存储相应记录主键的值而不是地址。换句话说,InnoDB的所有辅助索引都引用主键作为data域。

InnoDB的聚集索引和MyISAM 的 “非聚集”

因为InnoDB的数据文件本身要按主键聚集(顺序查询),所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。

第五点:并发阻塞

MyISAM:读写互相阻塞,不仅会在写入的时候阻塞读取,MyISAM还会在读取的时候阻塞写入,读读不阻塞。

InnoDB:读写阻塞与事务隔离有关。

https://www.cnblogs.com/songwp/p/14338422.html 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值