对数据库事务的总结

对数据库事务的总结,第1张

数据事务的总结 一:事务的概念

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

二:事务的四大特性(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.串行化

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5692761.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存