TCL(Transaction Control Language):事务控制语言
一、事务
一个或一组sql语句组成一个执行单元,这个执行单元全部执行,要么全部不执行。
事务的ACID属性
原子性:要么都执行,要么都回滚
一致性:保证数据的状态操作前和操作后保持一致
隔离性:多个事务同时操作相同数据库的同一个数据时,一个事务的执行不受另外一个事务的干扰
持久性:一个事务一旦提交,则数据将持久化到本地,除非其他事务对其进行修改
一、事务的创建
**隐式事务:**事务没有明显的开启和结束的标记
**显式事务:**事务具有明显的开启和结束的标记
**前提:**必须先设置自动提交功能为禁用
set autocommit = 0;
步骤1:开启事务
set autocommit = 0;
start transaction; //可选的
步骤2:编写事务中的sql语句(select, insert, update, delete)
语句1;
语句2;
...
步骤3:结束事务
commit; 提交事务
rollback; 回滚事务
二、事务的隔离级别
- 事务并发问题如何发生?
当多个事务同时操作同一个数据库的相同数据时 - 事务的并发问题有哪些?
脏读:一个事务读取到了另外一个事务未提交的数据
不可重复读:同一个事务中,多次读取到的数据不一致
幻读:一个事务读取数据时,另外一个事务进行更新,导致第一个事务读取到了没有更新的数据 - 如何避免事务的并发问题?
通过设置事务的隔离级别
级别 | |
---|---|
READ UNCOMMITTED | 脏读、不可重复读、幻读 |
READ COMMITTED | 可以避免脏读 |
REPEATABLE READ | 可以避免脏读、不可重复读和一部分幻读 |
SERIALIZABLE | 可以避免脏读、不可重复读和幻读 |
-
设置隔离级别:
set session|global transaction isolation level 隔离级别名;
-
查看隔离级别:
select @@tx_isolation;