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