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) 【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... (修改事务隔离级别)

    推荐阅读