数据库事务与脏读幻读

事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上的一组操作,要么都执行,要么都不执行。

什么是数据库事务?

说一下什么是数据库事务
事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上的一组操作,要么都执行,要么都不执行。

事物的四大特性(ACID)介绍一下?
原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
一致性: 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
隔离性: 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
持久性: 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

什么是脏读?幻读?不可重复读?
脏读(Drity Read): 某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。
不可重复读(Non-repeatable read): 在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。
幻读(Phantom Read): 在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。

什么是事务的隔离级别?MySQL的默认隔离级别是什么?
为了达到事务的四大特性,数据库定义了4种不同的事务隔离级别,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。

SQL 标准定义了四个隔离级别:
READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。
READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。
REPEATABLE-READ(可重复读): 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
SERIALIZABLE(可串行化): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。

Original: https://www.cnblogs.com/chaos2022/p/16206767.html
Author: cxc超小超
Title: 数据库事务与脏读幻读

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/608774/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 7-枚举和注解

    枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类 当需要定义一组常量时,强烈建议使用枚举类 如果枚举类中只一个对象,则可以作为单例模式的实现方式。 1.如何自定义枚举类…

    Java 2023年6月7日
    064
  • CORS(跨域资源共享)笔记

    0.前言 CORS(Cross-Origin Resource Sharing)是一个用于处理跨域问题的W3C标准,本文将介绍什么是跨域,引起跨域的同源策略,什么是CORS,COR…

    Java 2023年6月9日
    083
  • C[泊车管理系统]

    // main.c //泊车管理系统 // Created by 丁小未 on 13-7-14. // Copyright (c) 2013 年 dingxiaowei. All …

    Java 2023年5月29日
    071
  • Java基础之、基本运算符、自增自减运算符、初识Math类

    运算符 Java语言支持如下的运算符 算术运算符:+ ,- ,* ,/ , % ,++ ,– 赋值运算符:= 关系运算符:> , < , >= , 逻…

    Java 2023年6月8日
    049
  • k8s-持久卷存储

    第一个Demo PV与PVC概念 存储容量 访问模式 PV回收策略 PVC选择PV 第一个Demo PV关联后端存储,PVC关联PV,Pod关联PVC。这里的后端存储使用的是NFS…

    Java 2023年6月8日
    097
  • CTF大赛模拟-CFS三层内网漫游

    CTF大赛模拟-CFS三层内网漫游 环境: 三台虚拟机,三个网络。 target 1:192.168.161.178 , 192.168.52.132 (linux) target…

    Java 2023年6月6日
    083
  • Spring-Cloud-Alibaba系列教程(一)Nacos初识

    前言 在 2020&#x5E74;即将开启SpringCloudAlibaba的专题,希望2020年共同学习进步。 学习资料 文档 Naco文档 程序猿DD Spring …

    Java 2023年6月10日
    089
  • Skywalking-12:Skywalking SPI机制

    SPI机制 基本概述 SPI 全称 Service Provider Interface ,是一种服务发现机制。通过提供接口、预定义的加载器( Loader )以及约定俗称的配置(…

    Java 2023年6月5日
    078
  • mybatis各阶段的详解

    1 本阶段的需要注意的几个点 配置的顺序,不配则不用管,配则必须按顺序来!!!!properties?,settings?,typeAliases?,typeHandlers?,o…

    Java 2023年6月8日
    0114
  • getSessionFactory().openSession()导致druid连接池中的连接都占用满但无法回收

    该问题产生的现象 页面刷新几次后,就卡住,线上就得需要重新部署(还好是测试环境,不是真正生产环境) 过程及原因 查看日志线程池满了 Caused by: org.springfra…

    Java 2023年6月7日
    069
  • 并发编程基础(下)

    书接上文。上文主要讲了下线程的基本概念,三种创建线程的方式与区别,还介绍了线程的状态,线程通知和等待,join等,本篇继续介绍并发编程的基础知识。 sleep 当一个执行的线程调用…

    Java 2023年6月5日
    0101
  • 6. 站在巨人的肩膀学习Java Filter型内存马

    重新编译,执行命令 我们把恶意的Filter注入内存中,只要符合urlpattern,就可以触发内存shell,但这个Filter内存马注入是一次性的,重启就没有了。 看一下此时的…

    Java 2023年5月29日
    091
  • 差分数组入门

    差分数组 什么是差分数组? 差分数组:差分数组就是原始数组相邻元素之间的差。 其实差分数组是一个 辅助数组,从侧面来表示给定某一数组的变化,一般用来对数组进行区间修改的操作。 比如…

    Java 2023年6月15日
    067
  • idea创建maven项目速度慢?别急,这有三种方案

    1 问题 Intellij idea是一款非常强大的编辑器,可以很方便地帮我们创建maven项目,有用过的同学应该都深有体会,但我们经常会遇到一个困扰,那就是用idea创建mave…

    Java 2023年6月5日
    0112
  • Vulnhub-DC-6靶机实战(Nmap提权)

    前言 靶机下载地址:https://www.vulnhub.com/entry/dc-6,315/ KALI地址:192.168.16.108靶机地址:192.168.16.3 如…

    Java 2023年6月13日
    092
  • 给项目配置一个公共线程池

    /** * 公共线程池 * @return */ @Bean public ThreadPoolExecutor commonTreadPool(){ int poolSize =…

    Java 2023年5月30日
    070
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球