面试经常问到MySQL两阶段提交串,你能回答出几成?

本文深入探讨MySQL的两阶段提交机制,从事务特性、日志类型到两阶段提交流程,解析其背后的设计初衷和一致性保证。通过实例分析sync_binlog参数的影响,揭示如何判断binlog和redolog的一致性,以及两阶段提交在分布式事务中的应用。通过学习,读者将更好地理解和应对面试中关于MySQL两阶段提交的问题。
摘要由CSDN通过智能技术生成

一、吹个牛

面试官的一句:“了解MySQL的两阶段提交吗?” 不知道问凉了多少人!

这篇文章白日梦就和大家分享什么是MySQL的两阶提交到底是怎么回事!不管你原来晓不晓得两阶段提交,相信我!这篇文章中你一定能get到新的知识!

在说两阶段提交之前,大家要了解undo-log、redo-log、binlog。

先了解它们,才能更好的理解什么是两阶段提交

二、事务及它的特性

在说两阶段提交事物之前,我们先来说说事务。

一般当我们的功能函数中有批量的增删改时,我们会添加一个事物包裹这一系列的操作,要么这一组操作全部执行成功,只要有一条SQL执行失败了我们就全部回滚。相信你一定听说过这个比较经典的转账的Case。有一定工作经验的同学都知道,这么做其实是保护我们的数据库中不出现脏数据。整体数据会变得可控。

对MySQL来说你可以通过下面的命令显示的开启、提交、回滚事务

Copy# 开启事务
begin;

# 或者下面这条命令
start transaction;

# 提交
commit;

# 回滚
rollback;

但是日常开发中大家普遍使用编程语言操作数据库。比如Java、Golang... 在使用这种具体编程语言持久层的框架时,它们一般都支持事务操作,比如:在Spring中你可以对一个方法添加注解@Transctional显示的开启事务。Golang的beego中也提供了让你可以显示的开启事务的函数。

有一点不太好的地方是:大家在享受这种编程框架带来的便利的同时,它也屏蔽了你对MySQL事务认知。让人们懒得去往细了看事务

你可以看看我下面这个很简单的Case。

我有一张数据表

CopyCREATE TABLE `test_backup` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

然后我往这个表中insert几条数据

Copymysql> insert into test_backup values(1,'tom');
mysql> insert into test_backup values(2,'jerry');
mysql> insert into test_backup values(1,'herry');

再去查看binlog。

全网最牛X的!!!MySQL两阶段提交串讲

你会不会诧异?我上面明明没有显示的添加begin、commit命令,但是MySQL实际执行我的SQ

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值