数据库事务
事务(Transaction)是并发控制的基本单位。
所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。
简单地说,事务是一种机制,用以维护数据库的完整性。
事务的开始:
BEGIN或START TRANSACTION都是显式开启一个事务;
事务的提交:
COMMIT或COMMIT WORK都是等价的;
事务回滚:
ROLLBACK或ROLLBACK WORK也是等价的;
事务四个特性(ACID):
1.原子性(Atomicity):事务中的各个操作要么都做,要么都不做
2.一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态
3.隔离性(Isolation):一个事务的执行不能被其他事务干扰
4.永久性(Durability):一个事务一旦提交,它对数据库中数据的改变就应该是永久性
脏读:一个事务处理过程里读取了另一个未提交事务的数据
不可重复读:一个事务内多次查询却返回了不同的数据值(强调update)
幻读:一个事务范围多次查询返回不同的数据值(强调 insert,delete)
Sring中五种隔离级别:
TRANSACTION_NONE:不使用事务
TRANSACTION_READ_UNCOMMITTED:允许脏读
TRANSACTION_READ_COMMITTED:防止脏读,最常用的隔离级别,大多数数据库默认的隔离级别
TRANSACTION_REPEATABLE_READ:防止脏读和不可重复读
TRANSACTION_SERIALIZABLE:防止脏读,不可重复读,幻读,效率低
回滚:回滚通常是由数据库日志管理的,回滚时反向执行从事务开始时的所以日志。其他运行的事务可能依赖于被回滚的事务的结果,在这种情况下,这些依赖的事务也会被回滚