1. 事务基本概念介绍
- 1、事务的隔离性
多个事务操作同时操作一个数据,会造成干扰,因此需要对他们之间进行隔离(只需对操作同一数据的事务隔离即可),燃操作之间分开有序的执行。
- 2、如果不对事务进行隔离,出现的问题(脏读、不可重复读、幻读)
(1)脏读(重点突出在读,即读到的数据为脏数据,因为有其他人正在修改)
出现原因:修改数据的时候,同时可以读取数据;
以用户A和B同时对一张银行卡进行存、取操作为例来说明。
(2)不可重复读(重点突出在同一个事务中,前后两次读取时,读到的结果不一样)
查询原因:读取数据时同时可以进行修改;
以用户A和B同时对一张银行卡进行取款操作为例来说明。
A先读查询余额
B再读查询余额-->取款操作
A取款-->提交事务-->失败(余额不足,因为已经被B取走,这样就造成了A前后读取到的值不一样,即出现了重复读问题)
(3)幻读(重点突出同一个事务中,平白无故多出来几条数据)
出现原因:读取和修改的时候,可以insert数据;
以用户A打印银行账单为例(A和B共用同一张银行卡)
A先读取账单数据,加入为2条
->B对卡进行了存款操作
->A执行打印操作,打印出来确为3条账单(平白无故多出来一条,就像发生了幻觉一样,所以称为幻读)
- 3、事务隔离级别
(1)读未提交(READ_UNCOMMITTED)
只限制了2个事务不可同时修改,但修改的时候是可以读的。上述3个问题一个都没解决
(3)重复度(REPEATABLE_READ)
读数据的时候,不可修改(但是允许insert),解决了脏读和不可重复度,但是会存在幻读问题(因为没有限制insert)
(4)序列化(SERIALIZABLE )
所有事务的操作都是串行的,可以避免脏读、不可重复的、幻读的问题。但是性能变弱了