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