数据库事务

golang db事务的统一封装 事务处理的流程示例 database := db.DB tx, err := database.Begin() if err != nil { return err } stmt, err := tx.Prepare(sqlQuery) if err != nil { tx.Rollback() ret... 阅读详情

1.什么是事务

大家都是好兄弟,同生共死!

是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元) 

2.事务的四大特性

原子性 事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 
一致性 事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。
隔离性一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。 
持续性 也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。 

3.事务的隔离级别

 数据库在并发访问会存在如下问题:

脏读:脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。

例:当一个事务 T1 正在多次修改某个数据,而在这个事务 T1 中这多次的修改都还未提交,这时一个并发的事务 T2 来访问该数据,就会造成两个事务得到的数据不一致。

因为 T1 正在修改数据,T2 读取的是没有提交的数据,所以 T2 读取的数据是脏数据,

不可重复读:不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。

例:事务 T1 在读取某一数据,而事务 T2 立马修改了这个数据并且提交事务给数据库,事务T1 再次读取该数据就得到了不同的结果,发送了不可重复读。

T1 先读取数据,可是事务还没提交,T2 过来修改了这条数据,导致 T1 再次读取的数据和之前不同。

幻读:幻读是事务非独立执行时发生的一种现象。

例:事务 T1 对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务 T2 又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务 T2 中添加的,就好像产生幻觉一样,这就是发生了幻读。

 针对以上问题,数据库有四种隔离级别进行解决。

1.Read Uncommitted(读取未提交内容)

所有事务都可以看到其他未提交事务的执行结果。

这会导致事务 B 会读取到事务 A 中的未提交的结果,导致事务 B 发生脏读。

2.Read Committed(读取提交内容)

一个事务只能看见已经提交事务所做的改变。

事务 B 无法读取到事务 A 中的数据了,所以不会有脏读问题。不过如果事务 B 把事务 A 读取的数据修改了,会导致事务 A 发生两次读取数据结果不一致问题,导致不可重复读。

3.Repeatable Read(可重读)

它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。

会锁住事务 A 正在读取的某行数据,这时候事务 B 可以读取数据,却无法修改数据了,解决了不可重复读问题。不过同样,如果事务 B 不修改数据,而是在数据库表中插入一条新的数据,那么对于事务 A 如果之前针对全表进行了更新,在事务 B 新增数据后,发现还有数据没有更新,好像之前全表读取的数据不正确,因此会导致幻读问题。

4.Serializable(可串行化)

最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。

会锁住事务 A 查询的表或者记录行,此时事务 B 只可以读取这些记录,而无法修改这些记录。

在这里插入图片描述

 

CMU Advanced DB 课程笔记#2:数据库工作负载和数据库事务模型 CMU Advanced DB 课程笔记#2:数据库工作负载和数据库事务模型CMU Advanced DB 课程笔记#2:数据库工作负载和数据库事务模型数据库工作负载:数据库事务(Transaction简称为Txn):Transaction Model:Flat Txns:Flat Txns+ Savepoints:Nested TxnsChained Txns:Compensating Txns... 阅读详情

相关推荐

golang的database.sql包和事务处理

事务是数据库操作中的一个逻辑单元,由一系列的数据库操作组成。这一系列操作要么全部执行并且提交,要么全部回滚,确保数据的一致性和完整性。预处理语句是指在数据库中提前编译和优化的SQL语句模板,可以在之后多次重复使用。在这个示例中,预处理语句一次创建,多次执行,提升了效率,并降低了SQL注入的风险。

aw2371的博客 1546

mysql数据库中用于将事务_【MySQL】数据库事务

一、前言只有InnoDB引擎支持事务,下边的内容均以InnoDB引擎为默认条件二、常见的并发问题1、脏读一个事务读取了另一个事务未提交的数据2、不可重复读一个事务对同一数据的读取结果前后不一致。两次读取中间被其他事务修改了3、幻读幻读是指事务读取某个范围的数据时,因为其他事务的操作导致前后两次读取的结果不一致。幻读和不可重复读的区别在于,不可重复读是针对确定的某一行数据而言,而幻读是针对不确定的多...

weixin_32667439的博客 268

科研软件|Adobe Photoshop 2024 (PS 2024)

科研软件|Adobe Photoshop 2024 (PS 2024)

m0_55499682的博客 5517

数据库并发操作会带来哪些问题及原因

(1)丢失更新         当两个或多个事物读入同一数据并修改,会发生丢失更新问题,即后一个事物更新的结果被前一事务所做更新覆盖 即当事务A和B同事进行时,事务A对数据已经改变但并未提交时B又对同一数据进行了修改(注意此时数据是A还未提交改变的数据),到时A做的数据改动丢失了 (2)不可重复读       当两个数据读取某个数据后,另一事务执行了对该数据的更新,当前一事务再次读取该数据(

echo_sy的博客 3万+

Java服务端实现Google Pay支付功能

全网最全代码、最清晰服务端处理Google Pay,最清晰讲解Google Pay集成逻辑。

jack2350536098的博客 1万+

Matlab R2024a硬件支持包安装避坑指南:以Arduino为例(附离线包下载)

本文详细介绍了Matlab R2024a硬件支持包(Support Package)的安装流程,特别是针对Arduino平台的避坑指南和高效部署方法。从环境准备、离线安装方案到Arduino支持包的专项优化,提供了全面的技术细节和解决方案,帮助开发者避免常见错误,实现快速部署。

weixin_33737134的博客 449

并发控制

所谓事务,是指用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。 事务具有四个特性: 1.原子性 2.一致性(Consistency) 3.隔离性(Isolation)持续性(Durability) 并发控制概述 事务是并发控制的基本单位,保证事务ACID特性是事务处理的重要任务。 并发操作带来的数据的不一致性问题: 1.丢失修改 两个事务T1...

xiaomimi1993的博客 5742

【Burp入门第二篇】Chrome配置BurpSuite代理教程

1、配置Burp代理为127.0.0.1:80802、扩展商店添加插件switchyomega,修改服务器和端口为下图:3、打开代理,选择刚才添加的代理

等风来 8368

Hadoop (七) --------- 使用 Docker 搭建 Hadoop 运行环境

使用 docker 搭建 hadoop 集群

在森林里麋了鹿 3934

STM32外部中断EXTI原理与飞控实时应用实战

外部中断(EXTI)是嵌入式系统中实现事件驱动和实时响应的核心机制,其本质是将外部电平变化转化为可调度的CPU中断事件。基于ARM Cortex-M NVIC架构,EXTI通过GPIO-EXTI-NVIC三级硬件通路实现低延迟信号捕获,具备边沿触发、优先级管理与挂起控制等关键能力。在四轴飞控、工业传感器、人机交互等对毫秒级响应有强需求的场景中,EXTI显著优于轮询方式,兼顾实时性与CPU资源效率。实际开发需严格遵循SYSCFG映射→EXTI配置→NVIC使能的时序逻辑,并规避常见陷阱如中断号误配、伪触发、低

weixin_36382073的博客 66

烧录代码显示:no st-link 和Targrt DLL has been cancelled,如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1580

ajax 数据库 事务,laravel使用DB插入数据:事务

我有简单的Laravel上传,插入/更新。laravel使用DB插入数据:事务我有AJAX是上传CSV文件到我的目录..$.ajax({url:'uploadExcel',data: new FormData($("#uploadForm")[0]),headers: {'X-CSRF-TOKEN' : $('meta[name="_token"]').attr('content')},// da...

weixin_29422697的博客 494

BGP路由聚合:自动聚合和手动聚合

路由聚合是指将多条具体的路由合并为一条聚合路由,以减少路由表的条目数。这种技术通过只向对等体发送聚合后的路由,而不发送所有的具体路由,来减小路由表的规模。同时,被聚合的路由如果发生路由振荡,也不再对网络造成影响,从而提高了网络的稳定性。

网络技术联盟站 1221

Linq2db基于事务方式访问数据库

最近在写一个小软件OPC客户端,数据库用是的sqlite,之前都是自己写一个sqlhelper来访问数据库,后面听说用linq不用写sql语名,用起来很方便,听别人说linq2db是一款轻量型的linq,于是通过nuget安装了linq2db,安装好配置好数据库的映射就可以用了。 发现用linq写数据库操作还真的是方便,写代码时有提示,编译通过了就肯定不会有问题了,不过在用的时候遇到一...

weixin_45887608的博客 737

企业 IoT 产品安全渗透测试与欧盟 CRA 合规落地实战指南

欧盟 CRA(网络弹性法案)2026-09-11 漏洞报告义务生效,2027-12-11 全面强制产品安全不再是"加分项",而是市场准入的法律门槛本文面向 IoT 企业安全工程师/运维工程师,讲清楚如何从零建立渗透测试能力,并与 CRA 合规要求对齐落地。不讲空话,全是可执行的步骤。IoT 企业安全工程师、运维工程师负责产品合规的技术人员想从"被动响应"转向"主动安全"的团队[ ] 能独立完成 Web 应用渗透测试并输出报告[ ] 能对 REST/GraphQL API 进行安全评估。

探索云原生与智能化驱动下的安全运维新范式。关注DevSecOps、可观测性、AIOps等前沿领域,与您共赴技术前沿。 270

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

数据仓库与事务型数据库

为什么80%的码农都做不了架构师?>>> ...

weixin_34160277的博客 695

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

DB - 数据库事务

数据库事务一、基本介绍1. 事务的概念2. 事务操作3. 自动提交&手动提交二、四大特征三、隔离级别 一、基本介绍 1. 事务的概念 数据库事务:如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。 例如:银行转账业务可以被事务管理。张三给李四转账500元,从数据库的角度看,可以是这样一个事务 1. 查询张三的账户余额是否大于500 2. 张三的账户 -500 3. 李四的账户 +500 首先,开启事务,依序执行上述步骤。只有 3 步全部完成才算事务完成,此时会提交

xing123456jl的博客 995

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数据仓库与事务型数据库的区别

我们为某个程序创建的特定的数据库一般称为事务型数据库(Transaction Database), 它Data Warehouse(DW)还是有很大差别的. 1. 事务数据库帮助人们执行活动,而数据仓库帮助人们做计划。例如,事务数据库可能显示航班的哪些座位是空的,这样旅客可以进行预定。而数据仓库用于展示空座率情况的历史信息,以让航班管理员决定在未来是否要调度航班。 2. 事务数据库关注细...

weixin_30588675的博客 904

tp5中使用Db类连接数据库使用事务出现无效情况的原因

大家如果使用tp5框架,使用db类去执行一些数据库操作,有些业务会使用到数据库事务的操作,会出现事务不管用得情况, 如果是你的表类型不是Innodb的属性会导致不生效 还有以下情况会导致不生效: 例子 上代码 $issue_list = Db('order_issue')->insertGetId(array('order_id' => $add_order, 'issue' ...

sanmaoren123的博客 2439

数据库事务 --- Database Transaction

数据库事务 --- Database Transaction什么是事务(transaction)ACID性质原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)数据库冲突 -- ConflictsRead-WriteWrite-ReadWrite-Write数据库隔离级别 -- Isolation Levels如何实现IsolationSQL Isolation Level数据库可串行化 -- Serializability数据库恢复 -

HelloWorld 1617

海山数据库(He3DB)源码详解:事务源码执行过程

本文介绍了He3DB数据库在DDL和DML操作过程中,两种事务在底层源码执行流程细节。

jkl13633534809的博客 347

海山数据库(He3DB)源码详解:事务块执行过程及内核函数

事务SQL语句的执行过程,会先通过事务块函数修改事务块状态,然后根据事务块状态执行不同的事务行为。因此,本章会讲解事务块的开始和结束过程的事务块函数。

DAWN1221的博客 1007

数据库事务(Database Transaction)

数据库事务(Database Transaction) 数据库事务(Database Transaction) : 是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元. 一个数据库事务通常包含了一个序列的对数据库的读/写操作。它的存在包含有以下两个目的: 为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。 当多...

qq_36382679的博客 1199

海山数据库(He3DB)源码详解:子事务清理函数

李超,移动云数据库工程师,负责云原生数据库He3DB的研发。FAULT,恢复默状态;从事务链栈中弹出子事务,并将顶部事务状态修改为父节点状态。李超,移动云数据库工程师,负责云原生数据库He3DB的研发。

weixin_42744640的博客 646
上一篇: Java扫描指定路径下的类文件,Java获取jar包内的文件
下一篇: nginx配置负载均衡后总是访问同一台服务器
Yuwen_forJava
博客等级 码龄9年 28粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值