MySQL事务知识点整理

一、 事务

事务是MySQL执行的最小单元。
事务四大特征:原子性(atomicity或称不可分割性)、一致性、隔离性(又称独立性)、持久性。

问:如果一张表user(money),同时执行两个操作,一个money-100 ,一个money+100,开始一个事务,事务的执行如何保证原子性?
答:引入临时表undolog,每个事务都有一个undolog,中间数据存储在undolog,把-100,+100两个操作都写到这个表里,一起锁起来,再把这个结果一起写到原表中。


二、 索引

MySQL使用B+树做索引。

假设teacher表中有10000条数据,这些数据在MySQL中如何存储?
select * from teacher–MySQL数据是通过B+树存储的。B+树的数值都存储在叶子节点上。
在这里插入图片描述
表teacher(id, name)
name的基础上增加索引,再建一棵树,把id当作key建一个B+树,把name当作key再建一个B+树。
用到多个key的情形:二叉树、rbtree、进程或者线程也是多个key。


三、 行级锁、表级锁、页级锁

往数据插入一条数据的时候,数据要落盘的:
1)插入表的时候,表级锁锁住了整张表。
2)对于一条数据更改多个属性 ,采用行级锁。
3)页级锁:数据在磁盘中的存储是一页一页存,一页是4k,对于一个表比较大(如几千万条数据)时,这个时候是对表的一部分数据加锁,一页只允许一个操作。


四、binlog

哪些数据会存储到binlog?
每执行一条SQL语句,一般都会记录在binlog中。具体需要根据实际来区分:
select语句在binlog不做存储,insert、update、delete等语句会存储到binlog中。

binlog作用
可以使用binlog恢复数据库的一些历史操作,比如回滚。
这里的回滚与事务的回滚是没有直接关系的。事务的回滚是通过undolog来实现。

执行回滚的时候数据库服务是停止状态,这个时候数据可能已经宕机了。
在这里插入图片描述


五、InnoDB 和 MyISAM的区别

InnoDB支持事务,MyISAM不支持事务?
MyISAM是表级锁,InnoDB是行级锁。

InnoDB为什么不支持全文索引,而MyISAM支持全文索引?
博客系统:我们把一篇文章插入到数据库中,当我们要查看这篇文章的时候,假如文章有10W+篇,可以对文章进行索引。
InnoDB数据已经在节点上了,如果要全文索引,相当于复制了一份数据库。文章存储在MyISAM中比较好存储,InnoDB的叶子节点用来存储文章使得叶子太大,不适合用于存储文章。全文索引是做了一个摘要,做了MD5值,从而进行查询。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/locahuang/article/details/110353004