1. 开始语句: start transaction; begin; 2. 提交,确认当前修改: commit; 3. 回滚,放弃当前修改: rollback;ACID特性
-
原子性
指事务必须说一个原子的操作单位,即一次执行过程中,只允许出现两种情况:
1)全部执行成功
2)全部执行失败 -
一致性
指事务的执行不能破坏数据库数据的完整性和一致性,即事务在执行前和执行后,数据库都必须处于一致性状态。
如:从A账户转账到B账户,不能只有A账户扣了钱,而B账户没有加钱。 -
隔离性
指在并发环境中,事务间是相互隔离的,即不同事务并发操作相同数据时,每个事务都有各自完整的数据空间。
-
持久性
指事务一旦提交后,数据库中的数据必须被永久保存下来。
-
脏读:读取到了没有提交的数据;事务A读取到了事务B更新的数据,B又进行了回滚操作,因此A读取的数据是脏数据。
-
不可重复读:同一命令返回不同的结果集(更新);事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据更新并提交了,导致事务A两次读取数据结果不一致。
-
幻读:重复查询的过程中,数据发生了量的变化(insert, delete)。
| 事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| 读未提交(READ_UNCOMMITTED) | 允许 | 允许 | 允许 |
| 读已提交(READ_COMMITTED) | 禁止 | 允许 | 允许 |
| 可重复读(REPEATABLE_READ) | 禁止 | 禁止 | 可能会 |
| 顺序读(SERIALIZABLE) | 禁止 | 禁止 | 禁止 |
以上隔离级别,自上往下,级别越高,并发性越差,安全性越高。一般数据默认级别是READ_UNCOMMITTED或READ_COMMITTED
- MySQL中查看当前会话中事务的隔离级别
select @@tx_isolation
- 读未提交:隔离级别最低,允许脏读。
- 读已提交:不同事务执行时,只能获取到已经提交的数据。
- 可重复读:可保证事务在处理过程中,多次读取同一个数据时,该数据的值和事务开始时刻是一致的。
- 读未提交:有行级锁,没有间隙锁。与读已提交的区别是能够查询到未提交的数据。
- 读已提交:有行级锁,没有间隙锁,读不到没有提交的数据。
- 可重复读:有行级锁,也有间隙锁,每次读取的数据都是一样的,且没有幻读的情况。
- 顺序读:有行级锁,也有间隙锁,读表的时候,就已经上锁了。
DQL:查询语句
DML:写操作
DDL:定义语句
DCL:控制语言
以上都是隐式提交,执行这类型语句,相当于执行了commit。



