`

sql基础-事务

阅读更多

sql基础

事务:为了保持逻辑数据的一致性和恢复性,即一个逻辑操作内,所有的操作单元要么做,要么全部不做。

锁:当多个用户同时访问同一个数据库资源时,对访问的先后秩序进行管理和安排的一种机制,是实现事务的技术,保证数据库的安全读写。

死锁:上述锁机制中,因为不同事务在同一时间抢占相同的资源而导致的事务挂起等待,导致数据库在死锁期间造成的极大负荷和资源浪费。

 

和其他基础sql tutorial讲解sql事务一样,银行取钱中,取出100过程中,如果成功则账户减少100;如果中途机器故障则返回不扣。事务就是:要么全部执行,要不一点不执行回归原始状态。

 

1.特性:

原子性atomicity:一个事物内的所有操作是一个整体不可在分割,要么全部执行要么全部不执行。

一致性consistency:事务结束后,所有的数据状态是正确的。

隔离型isolation:不同的事务之间互不干扰,处理的都是任何其他事务处理前或者后的数据状态。

持久性persistence:事务提交后,数据恒久的不可回滚的。

 

2.提交回滚:

在不同环境下,可能不同数据库在sql语句执行后,需要显示的commit提交,rollback回滚。

 

3.锁:

我们想象下,在多个用户都是用事务同时访问相同资源时候,会造成以下问题:

 1)丢失更新:多个用户同时对一个数据资源进行更新操作,必定会产生覆盖的情况,最后自由一个结果,可能造成数据读写异常

 2)不可重复读:用户A在一个事务中,前后多次读取同一条数据,但是在此时刻用户B对该数据更新,造成用户A前后读取数据不一致;

 3)脏读:第一个事务正在读取第二个事务正在处理的数据,如果第二个事务没有完成所有的更新,第一个事务继续对这个结果集查询的数据将一半是更新过的一般还没有更新,这样的结果逻辑错误。

 4)幻读:用户A在一个事务中,前后多次读取同一条数据,但是在此时刻用户B对该数据库增加或者删除,造成用户A前后读取数据丢失或者增加;

 

 5)锁就是为了解决以上4中issue而产生的数据库事务处理机制,它对在一个事务所保护的所有一系列操作的集合进行一个包装,其他事务不能插足,即锁定(锁)。

  <1>.共享锁(s 表级):称之为只读锁,可以并发读取数据,但是不能修改数据。就是当数据资源上有共享锁时候,所有事务都不能对这个资源进行更新,只能读取。直到数据读取完成,共享锁释放。

  <2>.排它锁(x 行级):称之为独占锁、写锁。如果对数据资源进行增删改查操作,不再允许任何其他事务进行任何操作, 直到锁释放。

  <3>.更新锁(U):防止死锁的模式。两个事务对一个数据资源进行先读取在更新的操作,使用共享锁或者排它锁会出现死锁现象,使用更新锁能避免。资源的更新锁依次只能分配给一个事务,任何对资源进行修改,则编程排它锁,否则共享锁。

  <4>.意向锁:在层次架构的底层资源上(行、表)获取共享锁、排它锁、更新锁。例如表级防止了意向共享锁就表示事务要对表的页或者行使用共享锁。在表的一行上放置意向锁,可以放置其他事务获取其他不兼容的锁。它可提高性能,因为数据库引擎不需要检测资源的每一行每一列,就能判断是否可以获取到该资源的兼容锁。意向共享锁,意向排它锁,意向排他共享锁。

  <5>.架构锁:放置修改表结构时,并发访问的锁。

  <6>.大容量更新锁:允许多个县策划那个将大量的数据并发迁移到同一个数据表中,在加载时候不允许其他线程访问该表。

 

以上六种锁中,1.2.3是使用最频繁的。一般的数据库事务读操作使用共享锁,而写操作使用排它锁,在视具体业务而定。

 

4.死锁

死锁,就是事务将资源锁定而不释放,导致其他的事务无法使用该资源而出现的系统等待拥挤或者超时崩溃。

出现的场景:

 step1.事务A:先更新表a--延时1s--更新表b

 step2.同时有事务B:先更新表b--延时1s--更新表a

 step3.在1s之内同时执行事务A、B,出现死锁。

 因为在1s的延时过程中,事务给a更新时加排它锁1,在更新b是请求b排它锁2,而b已经占用排它锁2,同时更新a也要请求a的排它锁1,这样相互等待而两个事务又不愿意释放各自锁的情况下,永远在等待这个死循环。

 当然,数据库没有出现无限等待的情况,因为数据库引擎会定时检测一旦有死锁,将会按照一定规则,牺牲一个事务的代价释放所占用的锁而解决。被牺牲的事务回滚。

 死锁的牺牲规则,认为可设置优先级,优先级低的先牺牲。相同优先级的随机。

 

死锁是一种大量消耗时间资源的罪魁祸首,在大型系统应用中,虽然不可比避免,但是应当尽量优化sql,减少死锁:

  <1>更新锁不悔出现死锁。

  <2>在一个事务中,尽量不处理过多的复杂逻辑。

  <3>设置事务自动提交。

  <4>减少数据库并发访问。

  <5>使用分区表,视图。将数据放置在不同的磁盘或者文件组中,分散数据资源。

  <6>设计表时,优化逻辑,不要太复杂。

  <7>事务隔离级别尽量低。

在实际生产中,不会被动等待数据库本身的死锁检查机制来处理死锁,可以主动设置超时时间,这样不仅处理死锁,还处理了系统因为其他原因导致的等待时间超时而主动撤销事务,释放资源。并且在程序中手动这时回滚逻辑,保证数据的一致性。

 

5.事务隔离级别

一个事物与其他事务进行的资源、数据的更改相隔离的程度。隔离级别是从允许并发的副作用来描述数据库事务。

  1)read uncommittde:未提交读,最低隔离级别,A事务可以读取到B事务正在更改还没有提交的数据。对应锁的脏读。

  2)read committed:已提交读,它是sql默认的隔离级别,A事务只能读到B事务提交前或者提交后的数据。不会出现脏读,但会出现幻读,不可重复读。

  3)repeatable read:可重复读,不能读取到事务正在处理的数据,也不能修改事务正在处理的数据,不会出现脏读,不可重复读,但是会幻读。

  4)serialization:序列化,最高的事务隔离级别,一个事物的会将整张数据表锁定导致只能看到事务处理前的数据。不会出现脏读、不可重复读、幻读。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    SPD-Conv-main.zip

    SPD-Conv-main.zip

    Docker从零走向实战视频(上).zip

    目录: 1-1 虚拟化技术发展史 1-2 虚拟化技术是什么 1-3 虚拟化技术的分类 1-4 虚拟化技术的优缺点(1) 1-4 虚拟化技术的优缺点 1-5 容器技术的发展 1-6 Docker的发展历史 1-7 Docker是什么 1-8 容器和虚拟机的区别(1) 1-9 容器和虚拟机的区别(2) 1-10 为什么要使用Docker 2-1 Docker的版本 2-2 Docker的安装 2-3 Docker服务启动 2-4 Docker服务信息 2-5 Docker使用初体验-Docker的运行机制 2-6 Docker使用初体验-Docker镜像仓库 2-7 Docker使用初体验-Docker镜像下载 2-8 Docker使用初体验-Docker镜像启动运行 2-9 Docker使用初体验-访问容器中的Tomcat服务 2-10 Docker使用初体验-Docker的网络访问机制 2-11 Docker使用初体验-进入Docker容器内部 2-12 Docker使用初体验-补充说明 3-1 Docker的体系架构(1) 3-2 Docker的体系架构(2)r ..........

    《狼》教学设计.docx

    《狼》教学设计

    房屋租赁平台:提升租赁交易透明度的数字化路径

    对于在外工作或生活的人来说,寻找合适的住房是首要解决的问题。传统的租房方式包括直接联系房东、通过房屋租赁公司或在线搜索房源。直接找房东可能耗时且不便,尤其是需要提前看房的情况;通过中介虽然方便,但需支付额外费用;而在线租房则提供了随时随地的便利性,因此越来越受到青睐。 本房屋租赁平台使用Java语言配合Idea开发环境进行构建,后端数据库选用了Mysql。平台提供了在线预约看房的功能,包括浏览出租房源、在线预约看房、收藏心仪房屋以及留言咨询等。该系统不仅方便了租房者在线预订和管理看房计划,也为房东提供了房屋信息发布和预订管理的便利。

    四轮独立驱动横摆角速度控制,LQR 基于LQR算法的 基于二自由度动力学方程,通过主动转向afs和直接横摆力矩dyc实现的横摆角速度跟踪 ,模型包括期望横摆角速度,质心侧偏角,稳定性因素,lqr模块等

    四轮独立驱动横摆角速度控制,LQR 基于LQR算法的 基于二自由度动力学方程,通过主动转向afs和直接横摆力矩dyc实现的横摆角速度跟踪 ,模型包括期望横摆角速度,质心侧偏角,稳定性因素,lqr模块等模块,作为lqr入门强烈推荐。 还有详细的lqr资料说明,可以作为基本模板,和其他算法(mpc smc)做对比等

    ESP8266、ESP32网页配网 支持中文SSID

    ESP8266、ESP32平台支持AIRKISS自动配网,但是实际使用中,发现失败的次数挺高的,影响体验,因此另辟他法,偶然发现EPS 支持webserver,通过webserver进行配网可大大提高成功率。 webserver.c实现网页的显示,及获取用户配置的wifi名称和密码; wifi_config.c根据是否已经配过网,决定是否开启ap配网模式还是st连接wifi模式; data_persistence.c实现保存用户设置的wifi名称和密码,防止断电后丢失;

    Python圣诞节倒计时与节日活动管理系统

    圣诞节倒计时与节日活动管理系统是一个基于Python的桌面应用程序,旨在帮助用户庆祝和管理圣诞节期间的活动。随着圣诞节的临近,许多人希望能够清晰地了解距离节日还有多少时间,同时也希望能够有效地组织和安排各类活动,如家庭聚会、朋友聚会、圣诞晚会等。这个应用程序通过直观的用户界面和实用的功能,满足了这些需求。 该系统的核心功能包括一个实时更新的倒计时器,用户可以看到距离圣诞节还有多少天、小时、分钟和秒。倒计时器通过Python的datetime模块实现,确保准确性和实时性。用户可以自定义圣诞节的日期,以适应不同的庆祝习惯。 除了倒计时功能,用户还可以添加、编辑和删除节日活动。通过简单的输入框,用户可以记录活动的名称、时间和地点等信息。所有活动将以列表的形式展示,用户可以轻松查看即将到来的活动,并进行相应的管理。 在技术实现方面,该应用程序使用了Python的Tkinter库来构建图形用户界面。界面设计简洁明了,用户可以轻松地进行操作。程序还使用了matplotlib库来绘制活动的统计图表,帮助用户直观地了解活动安排情况。

    双目立体匹配三维重建点云C++ 本工程基于网上开源代码进行修改,内容如下: 1.修改为 VS2015 Debug win32 版本,支持利用特征点和 OpenCV 立体匹配算法进行进行三维重建及显示

    双目立体匹配三维重建点云C++ 本工程基于网上开源代码进行修改,内容如下: 1.修改为 VS2015 Debug win32 版本,支持利用特征点和 OpenCV 立体匹配算法进行进行三维重建及显示,相关代码需要自行修改,代码中添加了修改注释。 2.工程依赖库为 OpenCV2.4.8,内部已完成 OpenCV 相关配置。 无论电脑中是否配置Opencv 都可以运行。 并且增加了点云保存,可以用MATLAB 显示点云。 一、操作步骤 1.解压后将 Reconstuction3d bin 中的所有 dll 拷贝到C: windows sysWOW64 或者system32 根据电脑版本决定,64 位为 sysWOW64。 2.双击 Reconstuction3d.sln 打开工程,运行后出现结果。 二、程序详解 Reconstuction3d.cpp 为程序主函数 cvFuncs.cpp 为特征点三维重建。 包含SIFT、SURF、FAST 等算法。 cvFuncs2.cpp 为视差图三维重建.包含 BM、SGBM 等算法可以选择两者中的一个进行重建,推荐特征点。 特征点三维重建流程:

    course_s5_linux应用程序开发篇.pdf

    course_s5_linux应用程序开发篇.pdf

    ESP32+DS1302芯片【简单DIY制作时钟】

    ESP32+DS1302芯片【简单DIY制作时钟】

    扑克牌数字检测48-CreateML、Darknet、Paligemma数据集合集.rar

    扑克牌数字检测48-CreateML、Darknet、Paligemma数据集合集.rarPCC3.0 Yolov8-V1 2023-12-04 5:04 PM ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解和搜索非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 对于最先进的计算机视觉培训笔记本,您可以与此数据集一起使用 该数据集包括4471张图像。 播放卡分类以创建格式注释。 将以下预处理应用于每个图像: *像素数据的自动取向(带有Exif-Arientation剥离) *调整大小为640x640(拉伸) 应用以下扩展用于创建每个源图像的2个版本: * 0到6像素之间的随机高斯模糊

    政务大数据资源平台设计方案

    政务大数据资源平台设计方案

    基于SSM框架一个比赛裁判管理系统校园赛事管理系统,主要技术(SpringMVC + Spring + Mybatis+Hui+Jquery+Ueditor)全部资料+详细文档+高分项目.zip

    【资源说明】 基于SSM框架一个比赛裁判管理系统校园赛事管理系统,主要技术(SpringMVC + Spring + Mybatis+Hui+Jquery+Ueditor)全部资料+详细文档+高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    (174549194)ANSYS Fluent Tutorial Guide

    ANSYS Fluent Tutorial Guide ANSYS Fluent是一种基于 Finite Element Method(有限元方法)的计算流体力学(CFD)软件,广泛应用于航空航天、汽车、能源、医药等领域。下面是ANSYS Fluent Tutorial Guide的知识点总结: 1. ANSYS Fluent简介 ANSYS Fluent是一个功能强大且灵活的CFD软件,能够模拟复杂的流体力学、热传导、质量传递等物理过程。该软件广泛应用于航空航天、汽车、能源、医药等领域,用于模拟、设计和优化各种流体力学系统。 2. ANSYS Fluent的主要特点 * 基于Finite Element Method(有限元方法),能够模拟复杂的几何形状和边界条件 * 支持多种物理模型,包括流体力学、热传导、质量传递、化学反应等 * 具有强大的后处理功能,能够输出丰富的结果数据 * 可以与其他ANSYS产品集成,实现多物理场耦合分析 3. ANSYS Fluent在航空航天领域的应用 * 飞机和导弹的气动设计 * 飞机发动机的热传导和燃烧模拟 * 航天器的热保护和气动设计 4. AN

    (173083656)河西学院网络工程javaweb期末大作业.zip

    JavaWeb教务系统是基于Java技术构建的网络应用程序,用于管理高校的教学事务。这个期末大作业可能涵盖了多个关键知识点,包括但不限于以下内容: 1. **Servlet与JSP**:JavaWeb开发的基础,Servlet用于处理服务器端逻辑,而JSP则用于生成动态网页。学生可能需要了解如何创建Servlet类,实现doGet或doPost方法,以及如何在JSP页面上使用EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)标签。 2. **MVC模式**:Model-View-Controller模式是JavaWeb开发中常见的设计模式,用于分离业务逻辑、数据模型和用户界面。学生可能需要设计并实现一个MVC架构的教务系统,如Controller负责接收请求并调用Service,Service层处理业务逻辑,而Model层则封装数据。 3. **数据库操作**:项目可能涉及到MySQL或其他关系型数据库的使用,包括数据表的设计、SQL查询语句的编写以及JDBC(Java Database Connect

    Python之正则表达式基础知识

    Python之正则表达式基础知识

    《我的白鸽》教学设计.docx

    《我的白鸽》教学设计

    基于Spring、SpringMVC、Mybatis的校园二手交易平台全部资料+详细文档+高分项目.zip

    【资源说明】 基于Spring、SpringMVC、Mybatis的校园二手交易平台全部资料+详细文档+高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    非常好的音视频会议系统项目全套技术资料.zip

    非常好的音视频会议系统项目全套技术资料.zip

    UR5 3D模型 urdf模型

    UR5 3D模型

Global site tag (gtag.js) - Google Analytics