目录
事务的特征(ACID)
- 原子性(A):要么全部执行,要么全部不执行
- 一致性(C):事务执行前后,数据库的完整性不会被破坏
- 隔离性(I) :事务之间互不干扰
- 持久性(D):事务提交后将永久保存,不能再被回滚
隔离级别
- 读未提交:read uncommitted
- 读已提交:read committed
- 可重复读:repeatable read
- 串行化:serializable
隔离级别 | 脏读 | 不可重复读 | 幻读 |
读未提交(read uncommitted) | 可能 | 可能 | 可能 |
读已提交(read committed) | 不可能 | 可能 | 可能 |
可重复读(repeatable read) | 不可能 | 不可能 | 可能(InnoDB例外) |
串行化 (serializable) | 不可能 | 不可能 | 不可能 |
设置事务隔离级别
方式一
可以在my.ini文件中使用transaction-isolation选项来设置服务器的缺省事务隔离级别。该选项值可以是:
– READ-UNCOMMITTED
– READ-COMMITTED
– REPEATABLE-READ
– SERIALIZABLE
例如:
[mysqld]
transaction-isolation = REPEATABLE-READ
方式二
通过命令动态设置隔离级别
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL <isolation-level>
其中的<isolation-level>可以是:
– READ UNCOMMITTED
– READ COMMITTED
– REPEATABLE READ
– SERIALIZABLE
例如:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
隔离级别的作用范围
会话级:只对当前的会话有效
设置会话级隔离级别为READ COMMITTED :
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
或:
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
全局级:对所有的会话有效
设置全局级隔离级别为READ COMMITTED :
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;
查看事务隔离级别
select @@global.tx_isolation, @@tx_isolation
或
show variables like '%isolation%'
事务的操作
- 开启事务:Start Transaction
- 回滚事务:Rollback Transaction
- 提交事务:Commit Transaction