首页 > 数据库 >数据库

数据库

时间:2024-10-31 12:09:12浏览次数:8  
标签:事务 读取 Read 要么 数据库 提交

数据库

事务

事务(Transaction)指一个操作,由多个步骤组成,要么全部成功,要么全部失败。

举例:转账,假设A账户向B账号转账,那么涉及两个操作:

从 A 账户扣钱。
往 B 账户加入等量的钱。

在这种场景下,不能A 账户扣了钱,B 账户却没加钱的情况,要么同时成功,要么同时失败并回滚。

事务四大特性

A 原子性(Atomicity):作为一个整体,包含在其中的对数据库的操作要么全部被执行,要么都不执行

C 一致性(Consistency):事务在执行前后,数据库必须满足一些预定义的一致性规则,否则回滚

I 隔离性(Isolation):多个事务并发执行时,一个事务的执行不影响其他事务的执行

D 持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中

事务并发问题

  • 脏读(Dirty Read):读取未提交数据。

    事务 A 读取事务 B 尚未提交的数据,此时如果事务 B 发生错误并回滚,那么事务 A 读取到的数据就是脏数据。

  • 不可重复读(Non-repeatable Read):前后多次读取,数据内容不一致。

    事务 A 在事务 B 开始前读和事务 B 结束后读的数据不一样,因为数据被事务 B 修改了。

  • 幻读(Phantom Read):同一个查询在不同时间产生不同的结果集

    事务 A 在读取某个范围内的记录时,事务 B 在该范围内插入了新记录或删除了旧记录,事务 A 再次读取该范围内的记录时,前后获取的结果集不同,产生了幻读。

事务隔离级别

  • 读未提交(Read Uncommitted)
  • 读已提交(Read Committed)
  • 可重复读(Repeatable Read)
  • 串行化(Serializable)

image-20241031095628390

MVCC

多版本并发控制,以乐观锁为理论基础。

通过对数据行的多个版本管理来实现数据库的并发控制。这样就可以通过比较版本号决定数据是否显示,读取数据时不需要加锁也可保证事务的隔离效果。

MVCC 的核心实现主要基于两部分:版本链和读视图

MVCC 通过版本链实现多版本管理,通过 Read View 生成策略的不同实现,实现「读已提交」和「可重复读」这两种隔离级别。

  • 「读已提交」每次查询都会重新生成一个 Read View,做到每次提交后的数据可被当前事务读到。
  • 「可重复读」一直使用启动事务时生成的 Read View,直到当前事务提交,以此保证可重复读。

标签:事务,读取,Read,要么,数据库,提交
From: https://www.cnblogs.com/MuxLz/p/18517453

相关文章

  • 《向量数据库指南》——Milvus Cloud 过滤功能:轻松驾驭大规模数据搜索
    各位向量数据库领域的探索者们,大家好!我是大禹智库的向量数据库高级研究员王帅旭,也是《向量数据库指南》的作者。今天,咱们就来聊聊在使用MlivusCloud时,标量过滤这一强大功能是如何发挥作用的,以及如何通过这一功能实现更高效、更精准的向量数据处理。相信我,这不仅仅是一场技术盛......
  • 金蝶云星空批量插入单据到数据库
    ##****************************服务插件*******************#引入clr运行库importclr#添加对cloud插件开发的常用组件的引用clr.AddReference('System')clr.AddReference('System.Data')clr.AddReference('Kingdee.BOS')clr.AddReference('Kingdee.BOS.Core'......
  • Mybatis plus 数据库时间对的,取出来后,时间少了8小时
    Mybatisplus数据库时间对的,取出来后,时间少了8小时,数据连接的时区也是对的数据库是对的代码取出来是对的接口返回的JSON不对出现这种情况在@JsonFormat加上时区/***创建时间*/@Schema(description="创建时间")@JsonFormat(pattern="yy......
  • 重置数据库密码后导致网站无法访问
    解决方案步骤下载网站程序使用FTP客户端将网站程序从云虚拟主机下载到本地主机。例如,将网站程序保存在本地主机目录 E:\www。打开命令行窗口同时按 Win 键和 R 键,打开“运行”对话框。在“打开(O)”文本框中输入 cmd,然后单击“确定”。进入网站程序目录......
  • Dedecms数据库恢复与备份的两种方法
    使用phpMyAdmin进行备份和恢复备份步骤:登录主机控制面板。点击“数据库管理”->“登录phpMyAdmin”。使用数据库用户名和密码登录。找到要备份的数据库,全选数据表。点击“导出”,选择导出格式(如SQL),点击“执行”。恢复步骤:登录phpMyAdmin。选择要导入的数据库。......
  • KMC数据库设计
    存一下密钥管理中心数据库,免得找不到了具体表格:表名列名数据类型主键外键KeysKeyIDINTPKKeyValueVARBINARY(256)KeyTypeVARCHAR(50)CreatedAtDATETIMEExpirationDateDATETIMEStatusENUMKey_PoolsPoolIDINTPKPoo......
  • DBeave如何查看数据库表的DDL创建语句
    前言我们在使用DBeave时,有时候是需要看一下某个表的创建语句的,这样方便我们在其他数据库创建该表。那么,我们呢应该如何查看表的创建语句呢?如何查看DDL首先,我们选择我们要查看的数据库表,然后鼠标双击下该表。然后,我们点击下上方的属性,然后在下面再点下DDL选项。然后,我们就......
  • Java项目实战II基于Spring Boot的交通管理在线服务系统设计与实现(开发文档+数据库+源
    目录一、前言二、技术介绍三、系统实现四、文档参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着城市化进程的加速和交通流量的剧增,传......
  • Java项目实战II基于Spring Boot的小型诊疗预约平台(开发文档+数据库+源码)
    目录一、前言二、技术介绍三、系统实现四、文档参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言在当今快节奏的生活中,人们对医疗健康服务......