MySQL事务和隔离机制
2021/11/19 2:09:49
本文主要是介绍MySQL事务和隔离机制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
MySQL事务和隔离机制
1. 事务
由一组相关的dml语句组成,该组dml语句要么全部成功,要么全部失败
1.1 事务作用
- 用于保证数据的一致性
1.2 事务和锁
- 当执行事务操作时,MySQL会在表上加锁,防止其他用户更改表中数据
1.3 事务操作
- 开始一个事务:
START TRANSACTION
- 设置保存点:
SAVEPOINT [保存点名]
- 回退事务到某个保存点:
ROLLBACK TO [保存点名]
- 回退全部事务:
ROLLBACK
- 提交事务:
COMMIT
(提交后,所有操作不可回退)
注: 事务commit后,会自动删除事务中的所有保存点,从当前保存点回退到上一个保存点,当前保存点会被自动删除
1.4 事务注意事项
- 默认情况下,dml操作是自动提交的,不能回滚
- 开始一个事务,但没有创建保存点,执行rollback,默认回退到事务开始的状态
- 可以在事务中创建多个保存点
- 在事务没有提交前,可以选择回退到哪个检查点
- MySQL事务机制需要InnoDB的存储引擎才可以使用
- 开始事务 START TRANSACTION, SET AUTOCOMMIT = off
1.5 MySQL事务ACID
- 原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都执行,要么都不执行 - 一致性(Consistency)
事务必须使数据库从一个一致性状态变换到另一个一致性状态 - 隔离性(Isolation)
事务的隔离性是多个用户并发访问数据库时,事务为每一个用户开启的事务,不能被其他事物的操作数据干扰,并发多个事务之间要相互隔离 - 持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响
2. 隔离机制
多个连接开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个连接在获取数据时的准确性
2.1 四种隔离级别
脏读: 一个事务读取另一个事务未提交的改变(UPDATE,INSERT,DELETE)
不可重复读: 一个事务中进行多次查询,因为其他提交事务的修改或删除操作,导致每次查询到的数据都不一样,此时发生不可重复读
幻读: 一个事务中进行多次查询,因为其他提交事务的插入操作,每次查询到的数据不同,此时发生幻读
MySQL隔离级别定义了事务与事务之间的隔离程度
MySQL隔离级别(4种) | 脏读 | 不可重复读 | 幻读 | 加锁读 |
---|---|---|---|---|
读未提交(Read uncommitted) | ✓ | ✓ | ✓ | 不加锁 |
读已提交(Read committed) | ✗ | ✓ | ✓ | 不加锁 |
可重复读(Repeatable read) | ✗ | ✗ | ✗ | 不加锁 |
可串行化(Serializable) | ✗ | ✗ | ✗ | 加锁 |
2.2 设置隔离级别的方法
- 查看会话隔离级别
SELECT @@tx_isolation
- 查看系统当前隔离级别
SELECT @@global.tx_isolation
- 设置当前会话隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL [隔离级别]
- 设置系统当前隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL [隔离级别]
注: MySQL默认的隔离级别是REPEATABLE READ,没有特殊要求,一般不修改
全局修改,修改my.ini配置文件,在最后加上
[mysqld]
transaction-isolation = REPEATABLE-READ
//可选参数有:READ-UNCOMMITTED,READ-COMMITTED,REPEATABLE-READ,SERIALIZABLE
这篇关于MySQL事务和隔离机制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-15MySQL教程:初学者必备的MySQL数据库入门指南
- 2024-11-15MySQL教程:初学者必看的MySQL入门指南
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程