乐趣区

关于mysql:mysql事务隔离级别

1:事务的基本要素(ACID)

A (atomicity) 原子性
# 默认 mysql 开启主动提交 将对应 sql 主动 commit,否则须要人工提交
show VARIABLES like 'autocommit'
C (consistency) 连贯性

protect data from crashes

I (Isolation) 隔离性

保障同一时间段 多个事务对同雷同数据的查问更新的操作 仍然放弃牢靠连贯(彼此隔离)

D (Durability) 持久性

2:概念阐明

脏读(dirty read)

事务 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 set


mysql> 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… (批改事务隔离级别)
退出移动版