什么是事务
事务是逻辑上的一系列操作的集合,这些操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的最小工作单元。
事务的四个特性
- 原子性
事务是最小的执行单位,不允许分割。要么全部执行,要么全部不执行。 - 隔离性
事务之间的操作都是互相不影响的,各并发事务都是相互独立的。 - 一致性
在事务执行前后,数据都是保持一致的。 - 持久性
当事务提交到数据库之后,就永久保存在数据库里面。
并发事务所带来的问题
脏读:指一个事务读取了的数据是另一个事务未提交的数据。
不可重复读:指一个事务重复读取一个数据,当另一个事务也获取改数据的时候,就有可能导致第一个
事务重复读取的数据发生改变 ,而导致数据的不一致。
幻读:在并发事务下,即为在一个事务内读取到的数据为另一个事务所插入的数据,导致数据的前后
不一致的情况。
事务的隔离级别
-
1、READ UNCOMMITTED: 赃读、不可重复读、虚读都有可能发生。
-
2、READ COMMITTED: 避免赃读。不可重复读、虚读都有可能发生。(oracle默认的)
-
3、REPEATABLE READ:避免赃读、不可重复读。虚读有可能发生。(mysql默认)
-
4、SERIALIZABLE: 避免赃读、不可重复读、虚读。
注: 还有一个为DEFAULT.
级别越高,性能越低,数据越安全
mysql中:
查看当前的事务隔离级别:SELECT @@TX_ISOLATION;
更改当前的事务隔离级别:SET TRANSACTION ISOLATION LEVEL 四个级别之一。
设置隔离级别必须在事务之前