栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

对数据库事务的总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

对数据库事务的总结

一:事务的概念

所谓事务,即一件事,那么完成一件事肯定有很多个步骤,所以事务实际就是很多个步骤的集合。即事务实际就是增删改等一系列数据库操作的集合

二:事务的四大特性(ACID)

1.原子性:集合里的操作要么都成功,要么都失败

2.一致性:数据修改前后状态是一致的

3.隔离性:多个事务之间是互相独立的,可以同时进行的

4.持久性:类似数据的持久性

三:隔离性的存在引起的问题

由于隔离性的存在,当事务并发时,其中一个事务在读取事务时必然会出现一些问题(类似多线程的安全问题),事务并发读取数据时出现的问题大致可以分为三种

        1.脏读

        顾名思义,脏读就是读取了脏数据,所谓脏数据,就不正确的数据。众所周知,事务是需要提交的,当事务B读取到事务A未提交时的数据称为脏读。比如A事务A把a从1修改为0,但是未提交,此时事务B读取到的a是1,因此事务B读取到的就是脏数据

        2.不可重复读        

        顾名思义,就是数据经不起重复读取的考验。在一个事务内连续读取同一数据两次及以上,但是读取到的数据都是不同的,那么就称为不可重复读(在第二次读取之前,有另外一个事务修改了数据)

         3.幻读

        顾名思义,幻读,就像多次读取的过程中像出现了幻觉一样,比如在同一事务中,第一次读的时候只有一条数据,但是第二次读的时候有两条数据。与不可重复读不同的是,幻读的多次读并不是读同一数据,而且发生的变化是数据的数量发生变化了

四:隔离级别

针对上面三种情况,诞生了隔离级别,通过设置隔离级别,来满足特定的事务场景(默认是可重复读)

        1.读未提交

                允许事务B读取事务A未提交的数据,因此脏读,不可重复读,幻读都会出现

        2.读已提交

                事务B只能读取事务A提交后的数据,因此不会出现脏读,但是会出现按不可重复读和幻读。比如出现不可重复读的原因:事务B与事务A一开始同时读取到a=1,但是事务A修改a为2后提交,然后事务B再次读取时a为2,就出现了前后数据不一致

        3.可重复读        

                保证同一事务多次读取同一数据的结果是一样的,但是未解决幻读的问题,事务并发时不会出现脏读与不可重复读,但是会出现幻读(why?)

        4.串行化

                顾名思义,就是把事务一个一个地执行,不让事务并发执行。类似于把事务全部放进队列,一个一个地执行,完美地解决了三个问题,但是带来的是性能上的消耗(因为无法并行执行了!)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/692277.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号