数据库
mysql
MySQL逻辑架构
mysql索引
mysql性能分析(explain)
mysql事务
MVCC
SQL JOINS
本文档使用 MrDoc 发布
-
+
首页
mysql事务
## 事务的四大属性(ACID) (1)**原子性(Atomicity)** 原子性是指事务是一个不可分割的整体,事务中的操作要么都发生,要么都不发生。 (2)**一致性(Consistency)** 事务必须使数据库从一个一致性状态变换到另外一个一致性状态。 (3)**隔离性(Isolation)** 事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 (4)**持久性(Durability)** 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其 有任何影响 ## 开启和结束事务 ``` -- 设置当前的连接是不自动提交 set autocommit = false ; -- 如果需要提交事务,可以使用: commit; -- 如果需要回滚事务,可以使用: rollback; -- 开始事务 START TRANSACTION; ``` ## 事务并发问题 对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题: * **脏读**: 对于两个事务 T1, T2, T1 读取了已经被 T2 更新但还**没有被提交**的字段。 之后, 若 T2 回滚, T1读取的内容就是临时且无效的。 * **不可重复读**: 对于两个事务T1, T2, T1 读取了一个字段, 然后 T2 **更新并提交**了该字段。 之后, T1再次读取同一个字段, 值就不同了。 * **幻读**: 对于两个事务T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中**插入/删除**了一些新的行。 之后, 如果 T1 再次读取同一个表, 就会多/少几行。 ## 事务隔离级别 **数据库事务的隔离性**:数据库系统必须具有隔离并发运行各个事务的能力, 使它们不会相互影响, 避免各种并发问题。**一个事务与其他事务隔离的程度称为隔离级别。**数据库规定了多种事务隔离级别, 不同隔离级别对应不同的干扰程度, 隔离级别越高, 数据一致性就越好, 但并发性越弱。 **数据库提供的 4 种事务隔离级别:** | 隔离级别 | 描述 | | -------------------- | ------------------------------------------------------------ | | read-uncommitted | 允许A事务读取其他事务未提交和已提交的数据。会出现脏读、不可重复读、幻读问题 | | read-committed | 只允许A事务读取其他事务已提交的数据。可以避免脏读,但仍然会出现不可重复读、幻读问题 | | repeatable-read | 确保事务可以多次从一个字段中读取相同的值。在这个事务持续期间,禁止其他事务对这个字段进行更新。可以避免脏读和不可重复读。但是幻读问题仍然存在。注意:mysql中使用了MVCC多版本控制技术,在这个级别也可以避免幻读。 | | serializable(串行化) | 确保事务可以从一个表中读取相同的行,相同的记录。在这个事务持续期间,禁止其他事务对该表执行插入、更新、删除操作。所有并发问题都可以避免,但性能十分低下。 | | 隔离级别 | 脏读 | 不可重复读 | 幻读 | 性能 | 适用场景 | |------|----|-------|----|----|----------------------| | 读未提交 | ❌ | ❌ | ❌ | 最高 | 无严格一致性要求的统计场景 | | 读已提交 | ✅ | ❌ | ❌ | 高 | 大多数OLTP系统(如Oracle默认) | | 可重复读 | ✅ | ✅ | ❌* | 中 | 需要事务一致性(如MySQL默认) | | 串行化 | ✅ | ✅ | ✅ | 最低 | 金融交易、强一致性场景 | * Oracle 支持的 2 种事务隔离级别:**READ-COMMITED**, SERIALIZABLE。 Oracle 默认的事务隔离级别为: READ COMMITED 。 * Mysql 支持 4 种事务隔离级别。 Mysql 默认的事务隔离级别为: **REPEATABLE-READ**。在mysql中REPEATABLE READ的隔离级别也可以避免幻读了。
admin
2025年3月9日 10:09
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Rancher
Jenkins
ADMIN-UI
VBEN-ADMIN-UI
RUST-FS
MinIO
mindoc
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码