Mysql-InnoDB事务机制

本文详细介绍了Mysql-InnoDB事务的四大特性:原子性、持久性、隔离性和一致性,以及事务执行流程。讨论了不同隔离级别的特点,如脏读、不可重复读和幻读。还探讨了InnoDB如何通过redo log、binlog、undo log和MVCC来保证事务的正确执行,以及在事务失败时如何恢复数据。
摘要由CSDN通过智能技术生成

一、什么是事务

事务是Mysql保证数据一致性的关键技术。事务可以包含多个操作,这组操作需要全部执行成功,只要有一个操作失败,则整个事务操作全部失败。数据要么是原样,要么是操作全部执行成功后的状态,不存在部分操作执行成功而导致的中间状态。事务满足ACID四大特性。

1.原子性

原子性强调事务的不可分割,一组事务可能有多个操作,每个操作执行是独立的,执行过程中又面临着未知的问题,Mysql需要保证它们在逻辑上对外是原子的。一个经典的例子是转账,A转给B一百元。A的账户减少一百,B的账户增加一百,这两个操作或者说两条SQL需要满足原子性。要么都执行成功,要么都不执行,否则就会导致数据不一致。A的账户减少了一百,B的账户却没有增加一百,这种情况是不允许出现的。

2.持久性

事务一旦提交成功,数据就能持久化保存,即使出现断电宕机,重启后数据依然存在且保持一致性。

3.隔离性

隔离性是说各个并行事务间的可见性。Mysql是多线程处理客户端请求的,在事务并发执行的场景下,涉及数据一致性的问题。mysql有四种事务隔离级别,以保证数据的一致性。隔离级别越高,数据的一致性越强,但事务的并发性越低。

读未提交(Read Uncommitted)

读取到其他事务未提交的数据。该隔离级别下会造成脏读。事务A读取到事务B未提交的数据,B事务回滚了,这就造成了脏读。在实际工作中是不允许出现脏读的,该隔离级别不实用。

读已提交(Read commmitted)

读取到其他事务已提交的数据。该隔离级别解决了脏读,但是不能解决不可重复读,在同一事务中对同一记录读取多次,可能读到不同的结果。(记录被别的事务修改了)

可重复读(Repeatable Read)

在同一事务中,先后多次读取同一数据,结果都是一致的。(尽管记录可能被修改了,但读取到的仍然是第一次读取到的值。)在InnoDB引擎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值