MySQL事务

MySQL学习总结系列

1.MySQL概览

2.MySQL索引

3.MySQL锁

4.MySQL事务

        事务由独立单元的一个或者多个sql语句组成,在这个单元中sql语句是相互依赖的,整个单元是不可分割的整体,要么全部执行成功,要么都失败回滚到事务初始状态。事务的特性ACID,原子性、隔离性、持久性和一致性。其中原子性依赖undolog、redolog实现;隔离性依赖锁实现;持久性依赖redolog、DoubleWrite实现;一致性依赖MVCC(innodb引擎)、锁;

        事务的隔离级别包括读未提交,读已提交,可重复读和串行化。

读未提交:读未提及存在脏读问题。脏读即当前事务读取了其他事务中未提交的数据。脏读对应的还有脏写,即当前事务中的数据被其他事务修改,这个属于基本的要求,每个事务隔离级别都不存在脏写问题。

读已提交:读已提交解决了脏读问题,但存在不可重复读问题,即在当前事务中读取到其他事务已提交的成果,导致两次读取的数据不一致。

可重复读:解决了不可重复读的问题,但存在幻读。幻读跟不可重复读类似,这里主要指的是数据新增,假设事务a在对一批数据进行修改,当事务提交后再查询发现有数据并没有修改(其他事务新增的记录)。

串行化:最高的事务隔离级别,能够解决上述所有问题,但对数据库性能影响较大,使用频率较低。

        MVCC(多版本并发控制):为了提高数据库的并发性能,更好的解决读写冲突(不加锁、非阻塞的方式并发读),innodb引擎采用mvcc。

        当前读和快照读:当前读是以加锁的方式读取数据,读取的是最新版本的数据(select ...for update );快照读是常规的select操作,未加锁操作。

        MVCC多版本并发控制的实现是通过数据行中的两个隐藏列(txid和rollbackpoint)结合readview实现的,两个隐藏列一个保存修改数据的事务编号,另一个指向回滚段中的原始记录。readview根据隔离级别在事务的不同阶段创建,它记录了当前事务运行过程中识别到的受其他事务的影响情况。

        MVCC仅在读已提交和可重复读这两个事务隔离级别下有效,读未提交读取的是最新数据,串行化会对所有记录加锁,与MVCC并不兼容。其中RC和RR模式下不同的点在readview的创建时间,RR模式下是事务一开始就创建readview,后续的所有操作都依赖同一个readview进行判断;RC模式下是在每次select动作之前创建readview,所以mvcc只有在RR模式下能解决幻读问题,

readview关键信息

create txid:当前事务的id

mintxid:readview创建时活动的最小事务id

maxtxid:readview创建时活动的最大事务id

mids:readview创建时活跃的id集合

MySQL 事务是指一组数据库操作,这些操作要么全部执行,要么全部不执行,其目的是保证在并发环境下,数据的一致性和完整性。MySQL 事务具有 ACID 性质,即原子性、一致性、隔离性和持久性。 MySQL 中使用事务需要使用 BEGIN、COMMIT 和 ROLLBACK 语句,其中 BEGIN 表示开启一个事务,COMMIT 表示提交事务,ROLLBACK 表示回滚事务事务的基本语法如下: ``` BEGIN; -- 执行一组数据库操作 COMMIT; -- 提交事务 -- 或者 ROLLBACK; -- 回滚事务 ``` 在 MySQL 中,事务的隔离级别分为四个等级,分别是 Read Uncommitted、Read Committed、Repeatable Read 和 Serializable。隔离级别越高,数据的一致性和完整性越高,但同时也会影响数据库的性能。 MySQL 事务的 ACID 性质有以下含义: 1. 原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部失败回滚,不会只执行其中的一部分操作。 2. 一致性(Consistency):事务执行前后,数据库中的数据必须保持一致性状态,即满足数据库的约束条件和完整性规则。 3. 隔离性(Isolation):事务之间应该是相互隔离的,一个事务的执行不应该被其他事务干扰,保证事务之间的数据相互独立。 4. 持久性(Durability):事务提交后,对数据库的修改应该是永久性的,即使出现系统故障或电源故障,也不应该对数据产生影响。 总之,MySQL 事务是一组数据库操作,具有 ACID 性质,可以通过 BEGIN、COMMIT 和 ROLLBACK 语句来实现,隔离级别越高,数据的一致性和完整性越高,但同时也会影响数据库的性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值