一、什么是事务
事务是一组操作序列,是数据库并发控制的基本单位。其执行的结果必须是数据库从一种一致性状态到另一种一致性状态。事务是逻辑上的一组操作,要么全部执行,要么都不执行
二、事务的特性
原子性:事务是最小的执行单位,是不可再分的。事务的原子性保证动作要么全部执行,要么都不执行
一致性:执行事务前后,数据保持一致。多个事务对同一个数据的操作结果是相同的
隔离性:并发环境下,一个用户的事务不会被其他事务所干扰,各并发事务之间数据库是相互独立的。
持久性:事务一旦提交,对于数据库的影响是永久的,即使发生故障也不会影响当前数据库的状态。
三、脏读,不可重复读,幻读
脏读:某个事务更新一份数据,另一个事务进行读取,因为某些原因,前一个事务进行了回滚导致后一个事务读取的数据是错误的
不可重复读:一个事务的两次查询结果不一致;可能原因是两次查询中间含有其他事务的操作
幻读:事务读取数据的条目不一致。某一个事务读取数据,另一个事务对数据库中的数据进行了添加,此时前一个事务在读取数据会发现前后数据的数目不一致。
脏读,幻读强调多个事务,不可重复读说的同一个事务
脏读强调读取的内容,幻读强调读取的数量
四、事务隔离级别
为了保证事务四个特性的实现,数据库定义了四种不同的事务隔离级别:
READ-UNCOMMITTED(读未提交): 最低隔离级别,可能导致脏读,幻读,不可重复读
READ-COMMITTED(读已提交): 解决脏读,Oracle默认
REPEATABLE-READ(可重复读): 解决脏读,不可重复读,Mysql默认
SERIALIZABLE(可串行化): 最高隔离界别,解决所有
事务隔离级别基于锁机制实现,因此隔离级别越低,事务请求的锁越少