mysql事务简述
来源:互联网 发布:java 方法区 内存溢出 编辑:程序博客网 时间:2024/06/07 02:13
底层基于redo, undo日志来做。
undo用于回滚,redo用于down机后恢复数据
redo物理文件名:ib_logfile0和ib_logfile1
eg:
将库存skuStore从1改成2,假设事务号为:x需要做的事情如下:
1.begin transaction,有唯一事务id
2.记录undo log,skuStore=1
3.做事务操作,即设置skustore=2,这里对应事务x的内存数据会被更改,这时涉及内存操作,真正数据刷盘需要等到commit后并且受刷盘策略影响
4.记录redo log,即skustore=2 //必须刷盘,这步做完后即使这步后db挂了,重启时也能恢复
5.commit or rollback,这里也涉及写入到事务日志,即在日志文件中写入commit或rollback,表明一个事务的结束。
个人理解一个事务日志文件,即undo可以记录在redo日志中,这样可以顺序写。
问题:
1.如果第2步挂了怎么办?【记录undo log】
没做任何东西,所以没关系
2.第3步挂了?【做事务操作】
走回滚操作,用undo回滚
3.第4步挂了?【记录redo log】
走回滚操作。
4.第5步挂了?【commit or rollback】
如果事务日志中没有结束符【commit或rollback】,走回滚操作。
这里如果走提交操作会有问题,应用程序如果访问db,db这时挂了,应用程序这时会接收到异常,通常是认为事务操作未完成。
而db这块,如果之后重启后走正向的commit操作,就会使数据不一致。
阅读全文
0 0
- mysql事务简述
- 简述.net中有哪几种事务
- 事务概念简述
- Spring 事务机制简述
- 事务一致性简述
- MySQL简述
- 简述数据库事务并发机制
- mysql事务是事务
- MYSQL使用简述
- mysql 分区简述
- mysql 索引 简述
- MySQL MyISAM InnoDB 简述
- mysql命令简述
- mysql 性能优化简述
- MySQL配置简述
- MySql数据库简述
- mysql binlog 简述
- mysql trigger触发器简述
- [bzoj 1066][SCOI2007]蜥蜴
- JAVA之选择排序
- JAVA之插入排序
- 异常类自定义封装
- MFC中 OnPaint()与OnDraw的区别
- mysql事务简述
- TCP协议中的URG和PSH标志位的区别
- Socket复制文件编程Demo
- TCP的三次握手与四次挥手
- 反射代码块
- SQL Server 中WITH (NOLOCK)浅析(大自然的搬运工)
- Map的排序Demo
- 图像处理动机(课堂笔记)
- MFC UpdateData()用法