MySQL事务

MySQL事务

MySQL事务必须是在InnoDB引擎下的。因为只有innodb引擎是支持MySQL事务的。
在这里插入图片描述

sql的执行过程:

在这里插入图片描述## 了解事务事实上就是了解事务的性质

sql执行时 最优先进入的就是缓存。如果缓存里有用户想要的数据则会直接返回给用户。如果没有则从磁盘读取后放入缓存。*

缓存:mysql支持一种Buffer pool 机制,文件类型数据库:mysql将数据都存储在文件中。对数据的任何操作都意味着要对文件操作,那必须要进行文件IO(磁盘IO)但是磁盘Io非常耗时,如果将文件中的一部分数据拿到缓存中存储,再去操作数据的时候就可以只操作缓存。

MySQL的Buffer Pool机制:InnoDB作为MySQL的存储引擎,数据是存放在磁盘中的,但如果每次读写数据都需要磁盘IO,效率会很低。为此,InnoDB提供了缓存(Buffer Pool),Buffer Pool中包含了磁盘中部分数据页的映射,作为访问数据库的缓冲:当从数据库读取数据时,会首先从Buffer Pool中读取,如果Buffer Pool中没有,则从磁盘读取后放入Buffer Pool;当向数据库写入(insert|uodate |delete)数据时,会首先写入Buffer Pool,Buffer Pool中修改的数据会定期刷新到磁盘中(这一过程称为刷脏)。Buffer Pool的使用大大提高了读写数据的效率,但是也带了新的问题:如果MySQL宕机,而此时Buffer Pool中修改的数据还没有刷新到磁盘,就会导致数据的丢失,事务的持久性无法保证,所以我们需要使用mysql中的日志来保证数据持久性的。

解析器通过关键字将SQL语句进行解析,并生成对应的解析树。MySQL解析器将使用
MySQL语法规则验证和解析查询。
解析树:判断sql语法是否正确
预处理器则根据一些MySQL规则进行进一步检查解析树是否合法,例如检查数据表
和数据列是否存在,还会解析名字和别名,看看它们是否有歧义。
查询优化器
查询优化器会将解析树转化成执行计划。一条查询可以有多种执行方法,
最后都是返回相同结果。优化器的作用就是找到这其中最好的执行计划。
同的存储引擎数据存储的方式是不同,操作数据时操作数据的方式也是不同。

持久性的实现原理 redo log 日志

当数据修改时,除了修改Buffer Pool中的数据,还会在redo log记录这次操作;当事务提交时,会调用fsync接口对redo log进行刷盘。如果MySQL宕机,重启时可以读取redo log中的数据,对数据库进行恢复。redo log采用的是WAL(Write-ahead logging,预写式日志),所有修改先写入日志,再更新到Buffer Pool,保证了数据不会因MySQL宕机而丢失,从而满足了持久性要求。

什么是事务:

一个事物是由一条或者多条对数据库操作的sql语句组成的一个不可分割的单元。当事物中所有操作都正常执行完后,整个事务才会提交到数据库中去。
如果有部分事务处理失败,那么事务就会回到最初状态,因此事务要么全部执行要么全部失败。

	set  autocommit   开启事务

一旦开启事务就不会在摁回车时就造成永久性修改。在执行事务sql语句时 如果有错误则可以调用 rollback 退回。如果没有错误则执行 commit这时才会对数据造成修改。

开启事务 就会开启 undo log 日志

MySQL的 undo log 日志 确保了 可以rollback。作用和redo log 相反 在sql语句执行的时候会记录一条相反的语句。当执行 insere时 undo log 会记录 deldte语句。
当你执行rollback是,可以读取undo log 日志然后回滚数据。

当执行commit之后就会对undo log 日志进行数据清空,此时便不能rollback。

MySQL隔离性实现原理:锁机制+ MVCC机制;

隔离性一共分为四种隔离级别:未提交度,已重复度,可重复读和序列化。

一致性原理:

持久性隔离性原子性共同实现了数据的一致性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值