mysql知识学习

发布时间:2024年01月04日

0 mysql的隔离级别有4个,读未提交, 读已提交(rc), 可重复读(rr),串行化,mysql默认的隔离级别时rr

1聚簇索引就是主键索引, 可以一步到位i的索引

? ?非聚簇索引就是要通过二次查找, 实际存放的是索引和数据的地址, 后面还要同通过数据地址找到数据。

2mysql的binlog记录有3种模式, statement, row, mixed

statement就是记录sql语句的原文, 例如update T set a=now() ,这样在主从复制的时候,就会导致数据的不一致。

row这种记录模式就是记录具体执行的值, 比如sql 执行update T set a=now() 实际会转换为 update T set a=1987499333 这种具体的值,但是有个缺陷,row模式会把批量操作转换为单行,这样比较占用空间。

为了解决上面的2个2问题于是就有了mixd混合模式,自动识别sql是那种类型采用那种模式。

3.mysql的二段性提交。

在执行sql更新时会记录redolog和binlog二个日志, redolog时在事务执行过程中不断写入。而binlog只有在提交事务时才会写入。写入时机不一样,写完redolog后,binlog的写入发生异常时就会导致数据不一致问题。于是就有了mysql的二段性提交。

二段性提交就是mysql会把redolog的写入拆成prepare 和commit? mysql在刚开始写入redolog的时候把redolog设置为准备阶段, 在事务提交后, 写入binlog成功后,再把redolog设置commit阶段,这样写入binlog发生异常也不会影响,mysql根据redolog恢复数据时,发现redolog还处于prepare阶段就会回滚事务。

4.mvcc mysql每次执行事务都会形成一条记录,下次事务执行会把roll_rc?指向上一个事务形成一个版本链,只在rc和rr的隔离级别下有效, 默认rc每一次查询就会建一个新的readView, rr只有第一次查询才会建一个readview,后面的查询都用第一次的readview所以叫可重复读

文章来源:https://blog.csdn.net/zwjapple/article/details/135389717
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。