概述
事务是基于重做日志文件(redo log)和回滚日志(undo log)实现的。
每提交一个事务必须先将该事务的所有日志写入到重做日志文件进行持久化,数据库就可以通过重做日志来保证事务的原子性和持久性。
每当有修改事务时,还会产生undo log,如果需要回滚,则根据undo log 的反向语句进行逻辑操作,比如insert 一条记录就delete 一条记录。undo log 主要实现数据库的一致性,还可以用来实现MVCC
详解
事务操作原理:事务开启之后,所有的操作都会临时保存到事务日志,事务日志只有在得到commit命令才会同步到数据表,其他任何情况都会被清空(rollback,断电,断开连接)
客户端连接认证服务端,验证身份成功后建立连接,同时为当前用户当次连接开启一个临时的事务日志.
不开事务情况:当用户执行sql写操作的时候,服务器会接收sql语句并且执行sql语句,结果直接写入到数据表里面,然后直接同步到数据库里面
开启事务: 系统接收到 start transaction 指令之后,会改变原来的操作机制,后续的所有操作(写操作),会先写入到临时日志文件,如果有SQL操作,服务端先接收sql语句,执行sql语句,结果先写入到临时日志文件,此时临时日志文件会保存sql操作结果,假设有查询操作结果,会从数据表查询,经过临时日志文件结果进行加工返回.
事务结束: commit 或者rollback,都会清空临时的日志文件,commit会同步到数据表,rollback是直接清空
所以,只有服务端接收到commit命令之后才会将临时日志文件的sql操作结果保存到数据库中.如果断开连接或者是rollback了,sql操作结果不会保存到数据库里面,临时文件会自动清空.