说到这个,我们有必要知道什么叫事务:
作为单个逻辑单元执行一系列操作,要么完全执行,要么完全不执行。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。
事务有四个属性,称为ACID属性:
1、原子性(Atomicity):事务是一个原子单位,要么全部执行,要么全部不执行。
2、一致性(Consistent):事务的开始和结束,数据都必须保持一致状态。
3、隔离性(isolation):数据库系统提供隔离机制,保证并发事务之间是互相不干扰的。也就意味着事务处理过程中的中间状态对其他的事务是透明的。
4、持久性(Durable):事务完成之后,对数据的修改是永久性的,即使出现系统故障也能够保持。
事务的隔离级别
1.未提交读:
事务的最低隔离级别,一个事务可以读到另一个事务未提交的数据。会出现脏读的情况。
2.已提交读:
在一个事务修改数据过程中,如果事务没有进行提交,其他事务不能读取该数据。会出现不可重复读的现象
3.可重复读:
事务A在读取数据的过程中,事务B也可以对相同数据进行读取,但是不能进行修改直到事务A事务结束后,才会释放共享锁,这时事务B才可以增加排他锁,对数据进行修改。会出现幻读的现象。
4.序列化:
事务A在读取A表时,增加了表级共享锁,此时事务B也可以读取A表,但是不能进行任何数据的修改,直到事务A事务结束。随后事务B可以增加对A表的表级排他锁,此时事务A不能读取A表中的任何数据,更不能进行修改。
脏读:事务A修改某个数据,同时,事务B来读取,此时,事务A在进行回滚,此时,事务B读取的是事务A回滚前的数据,即出现脏读。
不可重复读:事务A读取A数据,事务B也读取A数据并修改了这个A数据,事务A在读取A数据会发现两次读取的不一样。
幻读:事务A修改了表A的所有数据,同时事务B向A表插入一条数据,事务A在读A表,会发现还有一条没有修改的数据,就像出现了幻觉一样。