MySQL事务

事务简介:一组操作集合,是一个不可分割的工作单位,事务会把所有操作作为一个整体一起向系统提交或撤销操作请求,这些操作要么同时成功,要么同时失败。

事务四大特性:

(1)原子性:事务不可分割,是最小操作单元,事务的所有操作要么同时成功,要么同时失败

(2)一致性:事务完成时,必须使所有数据保持一致状态

(3)隔离性:数据库提供的隔离机制,保证事务在不受外部并发操作影响的环境下运行

(4)持久性:事务一旦提交或回滚,他对数据库中的数据改变就是永久的

并发事务问题:
(1)脏读:一个事务读到另一个事务还没有提交的数据。

(2)不可重复度:一个事物先后读取同一条记录,但两次读取的数据不同

(3)幻读:一个事物按照条件查询数据,没有对应的数据行,但在插入是,又发现这行数据已经存在。

事务隔离级别:

(1)Read uncommitted:上述三个问题同时存在。

(2)Read committed:解决脏读。

(3)Repeatable Read:解决脏读和不可重复读。

(4)Serializable:解决上述所有问题。

事务隔离级别越高,数据越安全,但是性能越低。

事务原理:

原子性、一致性、持久化三个特性由两份日志保证,即redo log和undo log日志。

隔离性由数据库的锁和MVCC保证的。

(1)redo log,记录的是事务提交时数据页的物理修改,是用来实现事务的持久性。由redo log buffer和redo log file组成,前者在内存,后者在磁盘中,事务提交后前者通过后台线程提交到后者,用于刷新脏页到磁盘,发生错误时,进行数据恢复使用

        undo log,回滚日志,用于记录数据被修改前的信息,作用:提供回滚(保证原子性)和MVCC(多版本并发控制)。undo log是逻辑日志,他记录操作的反操作,例如,当delete一条记录,它记录一条对应的insert。

(2)MVCC(multi-version concurrency control),多版本并发控制,维护一个数据的多个版本,作用是让读写操作没有冲突,快照读为MySQL实现MVCC提供了一个非阻塞读功能。MVCC具体实现,依赖于三个隐式字段、undo log、readView。

a.隐式字段,表结构的隐藏字段,

        DB_TRX_ID:最近修改的事务ID、

        DB_ROLL_PTR:回滚指针,指向这条记录的上一个版本,回滚链、

        DB_ROW_ID:隐藏主键,若没有指定主键,生成该隐藏字段

b.undo log

c.Read View:包含四个核心字段

        m_ids:当前活跃的事务ID集合

        min_trx_id:最小活跃事务ID

        max_trx_id:预分配事务ID,当前最大事务ID+1

        creator_trx_id:ReadView创建者的事务ID

根据这四个字段规定版本链数据的访问规则,不同的隔离级别,生成Read View的时机不同

RC:事务中每一次执行快照读时生成ReadView

RR:仅在事务中第一次执行快照读时生成ReadView,后续复用该ReadView。

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 语句来实现,隔离级别越高,数据的一致性和完整性越高,但同时也会影响数据库的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值