首页 > 数据库 >数据库 事务 (总)

数据库 事务 (总)

时间:2023-08-28 10:56:52浏览次数:36  
标签:事务 隔离 幻读 数据库 提交 数据

一、事务四大特征(ACID)  

1、原子性(Atomicity):     事务开始后所有操作,要么全部做完,要么全部不做(回滚),不可以部分执行。2、一致性(Consistency): 数据一致性,数据库的完整性约束没有被破坏。3、隔离性(Isolation):       同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。4、持久性(Durability):      一旦事务提交,其对数据库的更改将永久保存,并且不会丢失。

二、事务隔离层级(隔离性)

隔离级别定义了事务与事务之间的隔离程度。
隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好。
1、读未提交(Read uncommitted) (相当于with(nolock))
(1) 定义:如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据。缺点:会产生脏读、不可重复读、幻读。

2、读已提交(Read committed)    默认隔离级别(Oracle和SQLServer默认的)
(1)定义: 一个事务读取到其他事务提交后的数据 ,A事务在 X表插入数据,在未提交的情况下,则B事务无法做 包含A事务新数据的 操作 (2)实现:“瞬间共享读锁”和“排他写锁”缺点:会产生不可重复读、幻读。

3、可重复读(Repeatable read) (MySQL默认的隔离级别)(相当于(HOLDLOCK)
(1)定义:就是一个事务对同一份数据读取到的相同,不在乎其他事务对数据的修改(2)实现:“共享读锁”和“排他写锁”缺点:会产生幻读。
4、序列化
(1)定义:事务串行化执行,隔离级别最高,牺牲了系统的并发性。(2)实现:“行级锁”缺点:可以解决并发事务的所有问题。但是效率地下,消耗数据库性能,一般不使用。


三、读

1、脏读
针对未提交数据,前一个事务回滚导致。              事务 B 去查询了事务 A 修改过的数据,但是此时事务 A 还没提交,所以事务 A 随时会回滚导致   事务 B 再次查询就读不到刚才事务 A 修改的数据了,这就是脏读
2、不可重复读
针对其他提交前后,读取数据本身的对比产生的原因主要是数据的更新
    
明显 A 值是不可重复读的。因为事务 B 和事务 C 一旦更新值并且提交了,事务 A 会读到别的值,所以此时这行数据的值是不可重复读的。
3、幻读
针对其他提交前后,读取数据条数的对比
主要是数据的新增或删除导致
  

事务A首先根据条件索引得到N条数据,然后事务B改变了这N条数据之外的M条或者增添了M条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条数据了,就产生了幻读。

四、C#中使用



五、跨服务事务处理机制






标签:事务,隔离,幻读,数据库,提交,数据
From: https://www.cnblogs.com/buzheng11/p/17661697.html

相关文章

  • 数据库索引
    一、基础1、概念类似目录实质:平衡二叉树从广义上讲,SQLServer检索所需数据的方法只有两种:使用全表扫描使用索引B-Tree索引  (MySQL,SQLServer,Oracle)索引每块固定大小4K  选字段一定要考虑字段大小(int4b、long8b) 大多数B-tree就3-4层的深度  比如一层(......
  • 在spring、tomcat中使用多数据源并支持分布式事务管理
    题目起得有点模糊,第一次接触这东西,还不怎么理解。 起因: 小项目,没有用分布式,但要操作两个数据库。本以为随便用spring配置两个数据源就搞定,查询是没问题,问题是有一个数据库老是插不进数据。Google狂搜之后,大概了解到是事务控制的问题。我用的是spring的声明式事务管理(<tx:annotat......
  • Django开启事务
    目录开启事务1django中实现事务的几种方式2事物的回滚和保存点3事务提交后,执行某个回调函数开启事务1django中实现事务的几种方式#1全局开启事务--->全局开启事务,绑定的是http请求响应整个过程DATABASES={'default':{#全局开启事务,绑......
  • Django信号、自定制命令、开启事务、执行原生SQL
    目录Django信号内置信号自定义信号执行原生SQL自定制命令步骤Django信号django自带一套信号机制来帮助我们在框架的不同位置之间传递信息。简单的说,当某一事件发生时,信号系统可以允许一个或多个发送者(senders)将通知或信号(siganls)发送给一组接收者(receivers)。有内置信号(......
  • 向量数据库(第 3 部分):并非所有索引都是一样的
    这是我关于向量数据库的系列文章的第三篇。第一部分比较了各种数据库供应商的产品以及它们在高层面上的区别,而第二部分则着重介绍了向量数据库的基础知识和功能。您可能已经阅读过DmitryKan在2021年撰写的优秀文章《并非所有向量数据库都是相同的》1,该文章涵盖了市场上各种向量数......
  • 数据库
    ------------恢复内容开始------------ DBA:数据库管理员 关系型数据库:行 列 非关系型数据库是实时变化的key:value如人的位置 微博热搜动态更新  1.4  官网下载后用压缩包安装以管理员方式打开cmd输入一系列命令安装mysql 下载并安装SQLyog ......
  • 业界都有哪些数据库监控工具
    本文主要介绍下数据库监控工具。业界有很多数据库监控工具,以下是一些常见的数据库监控工具及其使用的公司:Zabbix:一款开源的企业级分布式监控解决方案,支持对MySQL、Redis、MongoDB等多种数据库的监控。使用的公司包括:IBM、Nokia、Dell等。Prometheus:一款开源的监控和告警系统,支......
  • 数据库备份工具有哪些
    本文主要介绍下数据库备份工具。数据库备份工具有很多种,以下是一些常见的数据库备份工具:mysqldump:MySQL官方提供的命令行备份工具,适用于MySQL和MariaDB数据库。它可以将数据库导出为SQL文件,方便进行备份和恢复。属于逻辑备份工具。MyDumper:一款开源的MySQL备份工具,比mysqld......
  • 数据库主键生成策略
    首先明确的一点是,主键是为了区分不同的行记录,所以先抛开其他的因素,主键必须要保证:唯一性(单表或者分库分表的场景下)单表可选的方案有:自增idUUID业务字段,如:手机号、身份证号等等自增id自增主键是单表中很常用的使用方式。阿里Java开发中规定,表必备三字段:id,gmt_create,gmt......
  • 13、声明式事务
    13、声明式事务13.1、回顾事务要么都成功,要么都失败事务在开发种十分的重要,设计到数据一致性的问题,非常的重要确保完整性和一致性事务的ACID原则原子性一致性隔离性:多个业务操作同一个资源,防止数据损坏持久性:事务一旦提交,无论系统出现什么问题,结果都不会......