5.1 事务的特性
5.1.1 事务的基本要素
- 原子性(Atomicity):指事务是一个不可分割的单位,事务中的操作要么都执行,要么都不执行
- 一致性(Consistency):指事务将数据库从一个一致性状态转换成另一个一致性状态
- 隔离性(Isolation):指事务在执行过程中不能被其他事务所干扰
持久性(Durability):指事务提交后的数据库变化是永久性的
5.1.2 事务的隔离级别
脏读:对于两个事务,事务1读取了已经被事务2更新但还未提交的字段,此时事务2回滚,事务1读取的字段则是无效的
- 不可重复读:对于两个事务,事务1读取了一个字段,事务2更新了该字段,事务1再读取该字段,此时事务1两次读取该字段的值不同
- 幻读:对于两个事务,事务1读取了一个字段,事务2则插入一些新的数据,事务1再读取该表时,此时事务1两次读取到的内容不同
MySQL 的数据隔离级别
隐式事务:事务没有明显的开启和结束的标记,如 insert、update、delete
- 显式事务:事务具有明显的开启和结束的标记,需要提前禁用自动提交
```sql
/ 事务 /
1 开启事务
set autocommit=0; start transaction;
2 sql语句(select/insert/update/delete)
语句1; 语句2;
3 结束事务
3.1 提交事务
commit;
3.2 回滚事务
rollback;
4 事务的隔离级别
4.1 查看
select @@tx_isolation
4.2 修改
设置当前连接的隔离级别
set session transaction isolation level 隔离级别;
设置数据库系统的全局隔离级别
set global transaction isolation level 隔离级别;
5 设置回滚节点
savepoint 节点名; rollback to 节点名;
<a name="PkKDm"></a>
### 5.2.2 使用
```sql
# 1 【delete 与 truncate 在事务使用时的区别】
set autocommit=0;
start transaction;
delete from account; # 可以回滚
truncate table account; # 无法回滚
rollback;
# 2 【设置回滚节点】
set autocommit=0;
start transaction;
delete from account where id=0;
savepoint a;
delete from account where id=1;
rollback to a;