1:事务的基本要素(ACID)
A (atomicity) 原子性
# 默认mysql开启自动提交 将对应sql自动commit,否则需要人工提交
show VARIABLES like 'autocommit'
C (consistency) 连贯性 protect data from crashes
I (Isolation) 隔离性 保证同一时间段 多个事务对同相同数据的查询更新的操作 依然保持可靠连贯(彼此隔离)
D (Durability) 持久性 2:概念说明
脏读(dirty read) 【mysql事务隔离级别】事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据(事务读取了另外一个事务中没有提交的数据)
不可重复读 在同一个事务中,多次读取同样的数据返回不同的结果
幻读 3:隔离级别
1: 读未提交(READ UNCOMMITTED) 2: 读提交 (READ COMMITTED) oracle默认 3: 可重复读 (REPEATABLE READ) mysql默认 可以保证其他事务的对数据的修改(已经提交)不会影响当前事务(当前事务读取同一个数据应该始终一致),但是对于其他事务插入的数据可以读到(幻读)
4: 串行化 (SERIALIZABLE) 从上往下,隔离强度逐渐增强,性能逐渐变差
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交(read-uncommitted) | 存在 | 存在 | 存在 |
读提交(read-committed) | 否 | 存在 | 存在 |
可重复读(repeatable-read) | 否 | 否 | 存在 |
串行化(serializable) | 否 | 否 | 否 |
# 演示基于mysql5.7
# 查看隔离级别 默认为REPEATABLE READ
mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation|
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in setmysql> show variables like 'tx_isolation';
+---------------+-----------------+
| Variable_name | Value|
+---------------+-----------------+
| tx_isolation| REPEATABLE-READ |
+---------------+-----------------+
1 row in set# 修改当前session 隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
读未提交(read-uncommitted) SELECT statements are performed in a nonlocking fashion,由于不加锁,性能最好。
4:补充
查看运行中的事务
mysql> select * from information_schema.innodb_trx;
返回字段说明
- trx_id: 事务id
- trx_state:事务状态
- trx_started:事务开始时间
- trx_requested_lock_id:事务当前正在等待锁的标识(varchar类型)
- trx_wait_started:开始等待时间
- trx_weight:事务权重
- ....
- https://dev.mysql.com/doc/ref... (具体参考文档)
- https://dev.mysql.com/doc/ref...
- https://dev.mysql.com/doc/ref... (修改事务隔离级别)
推荐阅读
- 2022年一季度文章分类汇总
- MySQL Shell无法拉起MGR集群解决办法
- MySQL主从复制之并行复制说明
- 简单学习一下ibd数据文件解析
- 5. MGR管理维护 | 深入浅出MGR
- 只要9.9元!零基础学习MySQL
- 万答#21,如何查看 MySQL 数据库一段时间内的连接情况
- 技术分享|闪回在MySQL中的实现和改进
- 万答#20,索引下推如何进行数据过滤