事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务是恢复和并发控制的基本单位。
在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。
如果不考虑事务的隔离级别,会出现以下“不正确”的情况:
1. 脏读:指一个事务读到了另一个事务中未提交的数据。
2. 不可重复读:针对一条记录的,同一条记录前后不一样
3. 虚读(幻读):针对一张表,前后读到的记录条数不一样。
隔离级别的分类:
READ UNCOMMITTED:脏读、不可重复读、虚读都有可能发生。
READ COMMITTED:能避免脏读。不可重复读、虚读都有可能发生。
REPEATABLE READ:能避免脏读、不可重复度。虚读有可能发生。
SERIALIZABLE:能避免脏读、不可重复度、虚读。
mysql中控制事务隔离级别的语句:
select @@tx_isolation; //查看当前的事务隔离级别
set transaction isolation level 你的级别(上述四种之一); //设置隔离级别
mysql中默认级别为 REPEATABLE READ
mysql事务控制语句:
默认情况下一条语句为一个事务,无需手动开启。事务控制语句如下
start transaction:开启一次事务
rollback:回滚
commit:提交事务