MySQL数据库事务以及事务隔离级别
文章目录
- 数据库事务以及事务隔离级别
- MySQL数据库事务
- 事务的特性
- 事务的隔离级别
数据库事务以及事务隔离级别
MySQL数据库事务
数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。
事务的特性
事务特性有四个:
原子性:就是说一个事务要么执行成功,要么执行失败。
一致性:事务中的数据要保持一致,要从一个状态转变为另一个状态。
隔离性:事物之间相互独立,互不干扰。
持久性:一般保存的数据保存在硬盘上,就算是停电数据库关闭,数据都不会丢失。
事务的隔离级别
事务的隔离级别主要说的就是事务的隔离性。
不使用事务的隔离级别就会出现什么情况:
一、脏读
就是事务1访问到事务2的中间数据,比如就是事务2就是把一个数字进行两次i++操作,但是事务1访问的数据本应该是,两次i++之后的值,但是事务1访问的第一次i++之后的值,将第一次i++之后读取的数据称为脏读。主要就是查询操作
二、不可重复读
就是事务1在读取数据时,第一次读取的数据和第二次读取的数据不一致,就是事务1两次读取数据的期间,数据被另一个事务修改了,以至于事务1第二次读取的数据是事务2修改后的值,所以导致了数据两次读取的数据不一致的结果。
三、幻读
就是事务1进行多次读取时,第一次读取没有数据,第二次读取的时候有数据的结果,也是因为在两次读取期间,其他事务进行的插入操作,以至于事务1第二次读取的数据是其他事务插入或者删除后的值,所以导致了数据两次读取的数据不一致的结果。
从而引出了事务的隔离级别
事务的隔离级别:
一、未提交读:就是可以读到未提交的数据,在这种隔离级别下,查询不会进行加锁,这是最低级的隔离级别,可能会发生脏读,不可重复读,幻读的情况。
二、已提交读:就是只能读到事务提交后的数据,SQL Server和Oracle默认的隔离级别,这种隔离级别解决了脏读的问题,但是并不能解决不可重复读和幻读的问题。
三、可重复读:专门解决“不可重复读的”这一情况而制定的,解决了不可重复读这一情况,是MySQL数据库默认的隔离级别。
四、串行化:这是数据库最高的隔离级别,就是事务串行化的进行执行,就是一个一个排队进行执行事务,这个有效的解决了脏读,不可重复读,幻读的情况。
看一下张图,可以看出事务的隔离级别解决的问题
还没有评论,来说两句吧...