事务(Transaction) 是访问并可能更新数据库中各种数据项的一个 程序执行单元(unit) 。事务是恢复和并发控制的基本单位。
在关系数据库中,一个事务可以是 一条SQL语句 , 一组SQL语句 或 整个程序 。
事务应该具有4个属性: 原子性 、 一致性 、 隔离性 、 持久性 。这四个属性通常称为 ACID 特性 :
原子性 (atomicity):一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性 (consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性 (isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性 (durability):持久性也称 永久性 (permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
如果不考虑事务的 隔离级别 ,会出现以下“不正确”的情况:
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 :提交事务
博客园博文地址: mysql基础 事务的认识和使用