
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
select @@tx_isolation
DQL:查询语句
DML:写操作
DDL:定义语句
DCL:控制语言
以上都是隐式提交,执行这类型语句,相当于执行了commit。