小谈事务

coder-chi coder-chi     2022-12-28     196

关键词:

1.事务是什么?

并发控制单位,该工作单元内的操作是不可分割的。

2.为什么要使用事务?

高并发环境下,没有一定限制地并发对数据进行操作是不安全的,使用事务可以从某种程度上保障这种“安全”。

3.事务的特性

原子性(Atomicity) :

事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 。

隔离性(Isolation) :

一个事务的执行不能其它事务干扰。一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰,隔离是有程度的,不同的隔离级别也修饰了不同的一致性。

持续性(Durability) :

持续性也称永久性,是指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。

一致性(Consistency) :

事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。该状态由原子性、持久性保证、由锁操作支持,由隔离性修饰。

解释:

1.当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。假如数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不一致的状态。那么这个部分显然是由原子性隔离性保证的,保证了物理上的一致性。

2.所有的事务本质也是一段执行逻辑,不同的逻辑对应的也是不同的一致性要求,同时也会有不同的问题。这个部分为了避免问题,就需要通过设置不同的隔离级别,去修饰一致性。而这个部分一般是由数据库的锁机制实现的,这部分保证的是事务的逻辑一致性。

4.事务并发问题

1.脏读

2.不可重复读

3.幻读

4.第一类丢失更新(回滚丢失)

5.第二类丢失更新(修改丢失)

Mysql的数据库默认隔离级别为Committed Read,不能避免不可重复读和第二类丢失更新的问题。要解决这个问题需要采用悲观锁、乐观锁避免

5.第二类丢失更新解决方案

悲观锁

(推荐)在修改数据时先查询下,当然这个查询必须也要加锁(select ...for update nowait),在这里不加for update就不能保证你在查询到更新提交这段时间里这条记录没有被其他会话更新过,所以这种方式也需要在查询时锁定记录,保证在这条记录没有变化的基础上再做更新,若有变化则提示告知用户。

乐观锁

a.旧值法:

就是在sql更新时使用旧的状态值做条件,SQL大致如下 Update table set col1 = newcol1value, col2 = newcol2value…. where col1 = oldcol1value and col2 = oldcol2value….,如果这条记录已经被其他会话更新过,则本次更新了0行,这里我们应用系统一般会做个提示告知用户重新查询更新。这个取哪些旧值作为条件更新视具体系统实际情况而定。(这种方式有可能发生阻塞,如果应用其他地方使用悲观锁法长时间锁定了这条记录,则本次会话就需要等待,所以使用这种方式时最好统一使用乐观锁法。)

b.版本列法:

(推荐)其实这种方式是一个特殊化的前镜像法,就是不需要使用多个旧值做条件,只需要在表上加一个版本列,这一列可以是NUMBER或 DATE/TIMESTAMP列,加这列的作用就是用来记录这条数据的版本(在表设计时一般我们都会给每个表增加一些NUMBER型和DATE型的冗余字段,以便扩展使用,这些冗余字段完全可以作为版本列用),在应用程序中我们每次操作对版本列做维护即可。在更新时我们把上次版本作为条件进行更新。

小谈c#数据库存取图片的方式

代码CodehighlightingproducedbyActiproCodeHighlighter(freeware)http://www.CodeHighlighter.com/-->///<summary>///上传图片///</summary>///<paramname="FUSShopURL">FileUpload对象</param> 查看详情

scales小谈gulp

---恢复内容开始--- gulp是一个自动化构建工具,开发者可以使用它在项目开发过程中自动执行常见任务。外网:http://gulpjs.com/中文官网:http://www.gulpjs.com.cn/易于使用通过代码优于配置的策略,Gulp让简单的任务简单,复杂的任... 查看详情

纠错小谈

  今天在写好的一个PHP页面,语法上没有报错,但是页面上就是出现了如下图的提示:  一看是不认识mysql的语法,然后我就去百度为啥了,然后各楼楼主就是各种去注释的回答,试了半天也也没解决问题。  后来想了下... 查看详情

小谈arraylistlist与数组(代码片段)

1、数组在初始化的时候要指定数组的大小,ArrayList本质也是数组,不过是一个动态的数组,大小是可以变化的  数组的大小:length;  ArrayList的大小:size。2、数组很好理解,ArrayList是动态数组,究竟是怎么回事?我研究了... 查看详情

小谈软件工程

      随着信息时代的发展,软件工程产业迈入快速平稳的发展,这才有了大学软件工程专业。因为有社会的需要,才会有这一专业的发展,需要我们年轻的一代去创造。软件工程是一项体系化工程,需要大... 查看详情

js(javascript)小谈变量声明(显隐声明,声明提前)

var a=5;function fun(){    a=0;             alert(a);        &nbs 查看详情

小谈学习方法(学习篇)

读了这么多年的书,虽没有特别的成就,但也该多总结自己的学习方法吧。这里谈的学习方法,主要还是指理科方面,不拘束于哪个年龄阶段。当然,在学习方法方面,是因人而异的,不是说我的方法就适合你,同时我也不是什... 查看详情

小谈kvc中keypath的集合运算符

由于知识点比较简单,这里不再陈述一大堆的原理,直入主题。KVC中的集合运算符有以下三类:    1、简单集合运算符:@avg、@sum、@max、@min、@count(只能用在集合对象中,对象属性必须为数字类型)   2、对象... 查看详情

佰伦公司招商加盟,页面制作小谈

1.盒子的浮动  在标准流中,一个块级元素在水平方向会自动伸展,知道包含它的元素的边接;而在竖直方向与相邻元素依次排列,不能并排。  CSS中float属性,默认为none。将float属性的值设置为left或right,元素就会向其父... 查看详情

javascript中的this关键字小谈

说到this,就不得不提到function,相信看过其它类似文章的同学也知道,正是由于调用function的对象不同,才导致了this的指向不同。所以以前老是去记忆每种调用function的情况所对应的this,因为情况有限而且很少,所以这当然是可... 查看详情

小谈闭包(代码片段)

猥琐男:闭包?死肥宅:一个函数return一个函数,且引用这个函数的变量?闷骚男:其实闭包就是内部函数,我们可以通过在一个函数内部或者块里面定义一个函数(引用函数内部的变量)来创建闭包;死肥宅:搜嘎;猥琐男:... 查看详情

ios小谈开发者中的个人组织(公司企业)账号

 苹果对开发者主要分为3类:个人、组织(公司、企业)、教育机构。即:1、个人(Individual)2、组织(Organizations)组织类又分为2个小类:(1)公司(Company)(2)企业(Enterprise)3、教育机构(EducationalInstitutions)更多内... 查看详情

小谈音视频质量检测

本人从一位测试的角度出发,基于目前项目中摄像头的直播和语音对讲业务,正寻求音视频的质量测试及一些监控分析手段。工作中发现达到一定的并发程度之后,就会出现延时、卡顿、丢帧、马赛克等问题。所以最... 查看详情

小谈区块链及比特币

特斯拉前一阵的投资比特币,支持比特币支付政策大大刺激了一波,但是后续大赚一波以后宣布撤资。然后国家发布不允许使用虚拟货币交易给比特币最沉重的一击。随着比特币的沉入低谷,无数人对比特币的热情渐... 查看详情

小谈区块链及比特币

特斯拉前一阵的投资比特币,支持比特币支付政策大大刺激了一波,但是后续大赚一波以后宣布撤资。然后国家发布不允许使用虚拟货币交易给比特币最沉重的一击。随着比特币的沉入低谷,无数人对比特币的热情渐... 查看详情

小谈《悟空传》

小谈《悟空传》读书计划中,一部分是将以前读过的书重读。 好书(古今经典、大家出品),细读;一般的书,采取浏览式速读。 《悟空传》属于后者。不得不说,2009-2013年间初次读到时,还是挺喜欢的。 当年赞赏... 查看详情

小谈keepalivedvip漂移原理与vrrp协议

参考技术Ahttps://www.cnblogs.com/lixuwu/p/8476997.html什么是keepalived呢?keepalived是实现高可用的一种轻量级的技术手段,主要用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生。之所以说keepalived... 查看详情

小谈剪枝研究

参考技术A本文主要从几篇论文以及几篇博客分享谈一下现在的剪枝发展,以及从自己的一些实践中实际剪枝的实验效果。剪枝的理论基础就是过参数化(Over-parameterization)。在传统的机器学习中,过参数化意味着过拟合。但是... 查看详情