Mysql-一条更新语句要经历那些流程


  1. Mysql客户端将SQl语句传入MysqlServer层
  2. 将name=666的数据查找到,实际上,存储引擎去磁盘当中找到这条数据,并加载Buffer Pool当中然后将name=666所在行的数据name字段改为涛哥
  3. 修改以后不会将修改结果直接修改进磁盘,而是将修改进内存当中,会等待刷脏
  4. 记录Redo Log,记录Redo Log之后,并将这行记录状态改为prepare(准备状态),并没有commit
  5. 修改了好了之后,可以提交事务
  6. 生成操作Bin Log,并将Bin Log写入磁盘后
  7. 存储引擎提交事务
  8. 将Redo Log改为commit,事务完成
    为什么Redo Log需要2阶段提交
    Redo Log写入,Bin Log未写入:此时Mysql异常重启能根据Redo Log恢复name='涛哥’的数据。但Bin Log没有记录。后续使用Bin Log回复临时库,会出现数据丢失,导致状态不一致。

Bin Log写入,Redo Log未写入:此时Mysql异常重启能根据Bin Log重放name='涛哥’的数据。但Redo Log没有记录。重启后没有name='涛哥’的数据,会出现数据丢失,导致状态不一致。

#Java##MySQL#
全部评论

相关推荐

感性的干饭人在线蹲牛友:🐮 应该是在嘉定这边叭,禾赛大楼挺好看的
点赞 评论 收藏
分享
点赞 2 评论
分享
牛客网
牛客企业服务