当前位置: 首页 > news >正文

mysql事务

mysql事务四大特性
1.原子性
理解:事务中的所有操作要么全部一起执行,要么在发生的错误的时候全部不执行,也就是事务回滚了
原理:mysql使用undo log逻辑日志进行回滚,mysql会生成redo log和undo log 文件,undo log文件在数据库进行回滚时,会做之前相反的操作,比如回滚前是新增,那么根据undo log就是删除,回滚前是删除,那么根据undo log就是新增
2.持久性
理解:mysq通过redo log文件在系统空闲时间或按预先设定的更新策略将日志文件中的数据更新至磁盘,这就是预写式技术,这种技术可以大大减少IO操作的频率,提升数据刷新的效率。
3.隔离性
理解:同一时间里,只允许一个事务去请求同一数据,其它事务不能操作这一数据,事务与事务之间没有任何的干扰,例如:a向银行卡取钱,a在取钱的过程还没结束时,b不能向这个银行卡转账。
原理:mysql数据库通过锁、以及锁的粒度如:行级锁、表级锁、页级锁

事务之间的隔离,是通过锁机制实现的。当一个事务需要对数据库中的某行数据进行修改时,需要先给数据加锁。加了锁的数据,其它事务是不运行操作的,只能等待当前事务提交或回滚将锁释放。锁机制并不是一个陌生的概念,在许多场景中都会利用到不同实现的锁对数据进行保护和同步。而在MySQL中,根据不同的划分标准,还可将锁分为不同的种类。

按照粒度划分:行锁、表锁、页锁
按照使用方式划分:共享锁、排他锁
按照思想划分:悲观锁、乐观锁
接下来按上面的顺序介绍下这些锁的类别和特点:

粒度(行锁、表锁、页锁)
从锁的粒度这个方面来看,表锁在操作数据时会锁定整张表,因而并发性能较差。行锁则只锁定需要操作的数据,并发性能好,但是由于加锁本身需要消耗资源(获得锁、检查锁、释放锁等都需要消耗资源),因此在锁定数据较多情况下使用表锁可以节省大量资源。页锁是粒度介于行级锁和表级锁中间的一种锁,表示对页进行加锁。

MySQL中不同的存储引擎能够支持的锁也是不一样的。MyISAM只支持表锁,而InnoDB同时支持表锁和行锁,且出于性能考虑,绝大多数情况下使用的都是行锁。

InnoDB 行锁是通过给索引项加锁实现的,如果没有索引,InnoDB会通过隐藏的聚簇索引来对记录加锁。也就是说,如果不通过索引条件检索数据,那么InnoDB将对表中所有数据加锁,实际效果跟表锁一样。因为没有了索引,找到某一条记录就得扫描全表,要扫描全表,就得锁定表。

使用方式(共享锁、排他锁)
共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。

排他锁又称为写锁,简称X锁,顾名思义,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁。获取排他锁的事务是可以对数据就行读取和修改。

注意:对于select语句,InnoDB不会加任何锁,也就是可以多个并发去进行select的操作,不会有任何的锁冲突,因为根本没有锁。对于insert,update,delete操作,InnoDB会自动给涉及到的数据加排他锁,只有查询select需要我们手动设置排他锁。

思想(悲观锁、乐观锁)
悲观锁(Pessimistic Concurrency Control),正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。 悲观锁的实现,往往依靠数据库提供的锁机制 (也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。悲观锁通过常用的select … for update操作来实现悲观锁,悲观锁的流程也被称为:一锁二查三更新。

悲观并发控制实际上是“先取锁再访问”的保守策略,为数据处理的安全提供了保证。但是在效率方面,处理加锁的机制会让数据库产生额外的开销,还有增加产生死锁的机会。另外,在只读型事务处理中由于不会产生冲突,也没必要使用锁,这样做只能增加系统负载。还有会降低了并行性,一个事务如果锁定了某行数据,其他事务就必须等待该事务处理完才可以处理那行数据。

乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。乐观锁通常使用版本标识方法来实现,比如MVCC。

乐观并发控制相信事务之间的数据竞争(data race)的概率是比较小的,因此尽可能直接做下去,直到提交的时候才去锁定,所以不会产生任何锁和死锁。但如果这么做,还是有可能会遇到不可预期的结果,例如两个事务都读取了数据库的某一行,经过修改以后写回数据库,这时就遇到了问题。

一致性
一致性是指事务执行结束后,数据库的完整性约束没有被破坏,事务执行的前后都是合法的数据状态。一致性是事务追求的最终目标,原子性、持久性和隔离性,实际上都是为了保证数据库状态的一致性而存在的。

换句话说,ACID里的AID都是数据库的特征,也就是依赖数据库的具体实现。而唯独这个C,实际上它依赖于应用层,也就是依赖于开发者。这里的一致性是指系统从一个正确的状态,迁移到另一个正确的状态。什么叫正确的状态呢?就是当前的状态满足预定的约束就叫做正确的状态。而事务具备ACID里C的特性是说通过事务的AID来保证我们的一致性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-3119.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

SQLzoo 习题记录03-SELECT from Nobel Tutorial Nobel Quiz

目录 SELECT from Nobel Tutorial Nobel LaureatesWinners from 19501962 LiteratureAlbert EinsteinRecent Peace PrizesLiterature in the 1980sOnly PresidentsJohnChemistry and Physics from different yearsExclude Chemists and MedicsEarly Medicine, Late Literatur…...

JavaScript进阶学习笔记(五)--- 严格模式

一、严格模式 1、严格模式的概念 ​ JavaScript 除了提供正常模式外,还提供了严格模式(strict mode)。ES5 新增的严格模式是采用具有限制性 JavaScript变体的一种方式,即在严格的条件下运行 JS 代码。格模式在 IE10 以上版本的浏…...

Django+MySQL问题 启动server报错

问题: File “D:\Python36\lib\site-packages\django\db\models\query.py”, line 122, in iter for row in compiler.results_iter(): File “D:\Python36\lib\site-packages\django\db\models\sql\compiler.py”, line 828, in results_iter results self.execu…...

Kubernetes入门——Longhorn简介

概述 Longhorn是由Rancher创建的一款云原生的、轻量级、可靠且易用的开源分布式块存储系统。部署到K8s集群上之后,Longhorn会自动将集群中所有节点上可用的本地存储聚集为存储集群,然后利用这些存储管理分布式、带有复制功能的块存储,支持快…...

java初学者应该怎么学?

Java语言每年都在吸引更多同学前来入行,其中不乏存在很多初学者没有任何编程经验的人,那么我们作为初学者应该如何才能学好Java语言呢?小千给你几个建议。 1.切忌眼高手低 小千认为最重要的一点就是千万不要眼高手低,同学们无论是…...

git操作和笔记

使用本地的 git 工具操作 github 1. 网上创建好了有内容的仓库,本地去更新 将远端的仓库克隆到本地使用 git clone 地址 命令 远端地址分为两种 1. http 地址 2. ssh 地址 在克隆好的项目中更新一个 index.html将做好的更新提交到远端 在对应仓库打开 npm执行 git…...

安装好的matlab如何添加额外的工具箱Toolbox

最最简单的办法:就是通过MATLAB自己的附加功能里面去找,然后安装。 可能你会说要正版才可以,我不知道自己是不是正版,反正我是破解的那种,然后在官网下载额外的toolbox其实不需要你是否有正版授权,只要有一…...

一句话解释空洞卷积和反卷积

空洞卷积 通俗理解:在卷积核上增加空白数据,或者说是在卷积的时候固定跳过部分像素点,达到一次卷积看到的范围变大的效果。 作用:在不增加参数的情况下,增大感受野。(效果等同于卷积池化,但是避…...

SpringBoot

1、SpringBoot:Hello,World! SpringBoot简介 1.1、回顾什么是Spring Spring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者:Rod Johnson 。 Spring是为了解决企业级应用开发的复杂性而创建的&#xf…...

MD5加密工具类

依赖 <dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.7.1</version></dependency>md5加密工具类 package com.fsx.shiro.utils;import org.apache.shiro.crypto.hash.Md5H…...

javascript 幻灯片代码(含自动播放)

参见&#xff1a;https://www.runoob.com/w3cnote/javascript-slideshow.html...

paraview使用说明书

paraview tutorial&#xff1a;The ParaView Tutorial - KitwarePublic 1.简介 大多数人与ParaView相关联的应用程序实际上只是一个小的客户端应用程序&#xff0c;它构建在一堆库之上&#xff0c;这些库为ParaView提供了它的功能。 由于ParaView的绝大多数功能都是在库中实…...

python2.7安装pyqt4

起因 由于pyqt5对于pyqt4部分功能不兼容&#xff0c;因此在使用旧包的时候会报错。 这里尝试安装pyqt4&#xff0c;但是发现pyqt4的官方.exe安装包已经不提供支持&#xff0c;使用pip install Pyqt4也会失效&#xff0c;因此直接绕过这些步骤&#xff0c;使用.whl文件进行安装…...

【学习笔记】Java 8函数式编程#Lambda表达式#方法引用

全文目录函数式编程&#xff1a;Functional programming函数式编程的一些基本概念函数式编程的定义&#xff1a;程序的副作用&#xff1a;函数编程与数学函数&#xff1a;设计函数式编程应该遵循的原则&#xff1a;First-Class and Higher-Order Functions纯函数不变性引用透明…...

单线程+异步I/O的编程模型:协程

现代操作系统对I/O操作的改进中最为重要的就是支持异步I/O。如果充分利用操作系统提供的异步I/O支持&#xff0c;就可以用单进程单线程模型来执行多任务&#xff0c;这种全新的模型称为事件驱动模型。Nginx就是支持异步I/O的Web服务器&#xff0c;它在单核CPU上采用单进程模型就…...

实验一Ping 扫描实验

实验一Ping 扫描实验 预备知识: Ping是Windows和Linux都自带的一个扫描工具&#xff0c;用于校验与远程计算机或本机的连接。只有在安装TCP/IP协议之后才能使用该命令。Ping命令通过向计算机发送ICMP 回应报文并且监听回应验与远程计算机或本地计算机的连接。对Ping最多等待1秒…...

Java枚举类与注解——一篇文章读懂枚举类与注解

文章目录一、枚举类① 自定义枚举类② enum关键字定义枚举类③ enum 枚举类的方法④ enum 枚举类实现接口二、注解① 生成文档相关注解②注解在编译时进行格式检查③注解跟踪代码的依赖性&#xff0c;实现替代配置文件功能④ 自定义注解⑤ jdk提供的4种元注解⑥ JKD8 新特性&am…...

Git一个项目中引用其他Git仓库

// git submodule add [git地址] [目录位置] $ git submodule add https://xxx/gittest.git src/gittest使用submodule后 在当前git目录下会生成一个 .gitmodules 文件 如果但当前目录已经存在了一个 .gitmodules&#xff0c;命令需要更改为 $ git submodule add -f https://…...

工作中让他人做选择题

object事实信息reflective感受体会联想interpretive理解思考decision决定行动你看到/听到/记得什么你感觉怎么样学到/领悟什么下一步该做什么 O 场景&#xff1a;Car在某次制办事情不断请示领导&#xff0c;领导最终以选择题提问方式反向给出了答案。 R 感受是错过了一次可以做…...

2021.6.1

链接查询 连接查询可分为内连接和外连接。 一.内连接&#xff1a;内连接分3种&#xff1a;交叉连接、相等连接、自然连接。 1.内连接语法&#xff1a; 1.交叉连接&#xff1a; 交叉链接又称“笛卡尔链接”&#xff0c;即所有类型的内连接的基础 语法 select * from table…...

Ambari2.7.3集群Oozie调度Spark示例

文章目录1.环境准备2.修改配置文件2.1 解压Oozie自带样例包2.2 修改workflow.xml文件2.3 修改job.properties文件3.上传到HDFS4.提交任务5.监控1.环境准备 集群版本&#xff1a;Ambari2.7.3 HDP3.0.1.0-187集群开启Kerberos身份认证&#xff0c;Ranger权限认证 2.修改配置文…...

词达人自动做题PHP版全套开源+前后台分离开发+带半个软件+CDKey兑换

简介&#xff1a; 开发语言&#xff1a;PHPMysql 源码简介与安装说明&#xff1a; 易语言版的我是今天写的。多线程有需要再去调风控&#xff0c;恶心的一批。我这网课上到现在基本上啥TM也没学。就这样了。我就简单上几张图自己看看吧。前端是Vue.js。后端是PHP。前后台分离…...

笔记:svn操作优化,在bash中通过别名实现svn代码仓库的在线操作

一、TortoiseSVN 使用过SVN的应该都知道TortoiseSVN&#xff0c;界面操作简单方便&#xff0c;易上手。 二、SVN命令行 如果想在命令行中操作代码仓库&#xff0c;必须把代码下下来&#xff0c;才能在目录间切换&#xff0c;如果代码仓库中的代码量很大&#xff0c;全部下下…...

filter4----初始化 filter

1、创建graph /*** Allocate a filter graph.** return the allocated filter graph on success or NULL.*/ AVFilterGraph *avfilter_graph_alloc(void); 相当于一张图&#xff0c;filter的各种操作就按照这张图 2、创建buffer filter的上下文 通过上面的图我们知道解码出…...

12个夏季旅行彩色lr预设

夏季来临&#xff0c;计划海滩旅行的朋友&#xff0c;可以试试这款12个夏季旅行彩色lr预设&#xff0c;这些预设将帮助您获得清晰、专业的旅行照片&#xff0c;只需单击一下按钮&#xff0c;即可获得完美、专业的触感。 12个夏季旅行彩色lr预设介绍 由来自51个国家和地区的国…...

作业:随机信号的参数建模法及MATLAB实现

随机信号AR模型及MATLAB实现 随机信号的参数建模法 在对语音信号进行编码时&#xff0c;往往通过分析不同种类语音信号的特点及产生&#xff0c;用数学模型表示信源&#xff0c;而编码器根据输入信号计算模型参数&#xff0c;然后对模型参数进行编码&#xff0c;也就是说&…...

字节跳动Java实习面试凉凉经,含答案解析

前言 JVM 内存模型一共包括三个部分&#xff1a; 堆 ( Java代码可及的 Java堆 和 JVM自身使用的方法区)、栈 ( 服务Java方法的虚拟机栈 和 服务Native方法的本地方法栈 )保证程序在多线程环境下能够连续执行的程序计数器 特别地&#xff0c;我们当时就提到Java堆是进行垃圾回…...

如何简单的创建一个多人在线聊天室

学习目标&#xff1a; 在本教程中&#xff0c;我们将要使用PHP和jQuery创建一个简单的在线聊天工具。 这种实用性的模块对于你想要有实时在线客户支持系统的网站可以说是完美。 废话不多说直接开始。 步骤1&#xff1a;HTML的代码结构 创建一个index.php <!DOCTYPE htm…...

如何系统全面性学习Java语言?面试篇

开头 提起Spring&#xff0c;大家肯定不陌生&#xff0c;它是每一个Java开发者绕不过去的坎。Spring 框架为基于 java 的企业应用程序提供了一整套解决方案&#xff0c;方便开发人员在框架基础快速进行业务开发。 我最近一直在研究大厂的面试&#xff0c;发现现在的不论大大小…...

短信后台功能与通道路由模块客户通道选择短信平台开发|国际短信通道短信后台源码

短信后台功能与通道路由模块|客户通道选择短信平台开发|国际短信通道短信后台源码 用户模板审核和签名审核,可审核用户提交过来的短信模板,可审核用户提交过来的签名,可管理用户提交过来的模板和签名进行编辑删除和修改,支持用户企业认证和个人认证. 通道路由模块在后台进行设置…...

Disable SELinux

To check if SELinux is running/enforcing, run the following command: sestatus To disable SELinux, edit the file /etc/selinux/config, and change SELINUXenforcing to SELINUXdisabled The following command will disable SELinux: sed -i s/SELINUX\enforcing/...

hbase错误记录之 disable表卡住

hbase错误记录之 disable表卡住 现象 通过hbase shell disable表&#xff0c;显示表以及关闭&#xff0c;但是使用disabletable_name&#xff0c;却显示表状态为disableing&#xff0c;不能正常使用。 分析 1&#xff09;通过以下命令查看表状态&#xff1a; hbase> is…...

Flutter设置按钮disable

一、说明 其实如果只是要让按钮不响应事件&#xff0c;有很多种方法&#xff1a;你可以用变量控制你的逻辑&#xff1b;可以设置 onPressed 为 null&#xff1b;可以用AbsorbPointer 禁用事件...... 我的场景是要给按钮设置 disabledColor&#xff0c;在 button 为 enable 时…...

你的 disable fork 用的对吗?

我们先来看一段代码&#xff1a; timescale 1ns/1ps;task jobs&#xff08;&#xff09;;forkbegin#10;$display("delay 10ns");endbegin#20;$display("delay 20ns");endjoin_anydisable_fork endtask 这个简单的 fork join_any 会在 打印 “delay 10n…...

Android设置按钮为disable状态

前言 本文介绍Android上如何设置按钮为disable状态。这个虽然很简单&#xff0c;但是我也是查询了才知道调用这个函数&#xff0c;很惭愧&#xff0c;Android相关的接触的较少&#xff0c;所以写下来记录下。 方法 在Button属性中&#xff0c;有setEnabled的方法&#xff0c…...

eslint-disable的使用

eslint-disable的使用 导言 如果项目里引入了eslint&#xff0c;但又想eslint忽略对多行或者某一行代码的检查&#xff0c;这时&#xff0c;我们可以使用eslint-disable。 用法 对整个文件生效 在文件第一行使用/* eslint-disable*/ /* eslint-disable */ var a 1; cons…...

Execute Disable Bit

“Execute Disable Bit”是Intel在新一代处理器中引入的一项功能&#xff0c;开启该功能后&#xff0c;可以防止病毒、蠕虫、木马等程序利用溢出、无限扩大等手法去破坏系统内存并取得系统的控制权。其工作原理是&#xff1a;处理器在内存中划分出几块区域&#xff0c;部分区域…...

Cisco 交换机端口err-disable 解决方法

我的一台2960GG透过多模 10G SFP-10GBase-LRM光纤接核心3850交换机&#xff0c;今天早上之间网络不通&#xff0c;3850G和2960上的SFP模块指示灯都不亮&#xff0c;查看CISCO 2960G端口有如下提示&#xff1a;#show int status err-disabledPort Name …...

a padding to disable MSIE and Chrome friendly error page解决方案

今天后台管理系统上传视频的时候&#xff0c;nginx一直报这个错。 <html> <head><title>500 Internal Server Error</title></head> <body bgcolor"white"> <center><h1>500 Internal Server Error</h1><…...

VUE3 You may use special comments to disable some warnings. Use // eslint-disable-next-line to ignor

今天学习vue3建项目的时候遇到Eslint各种报错&#xff0c; 报错一&#xff1a; 8:1 error Delete ⏎ prettier/prettier ✖ 1 problem (1 error, 0 warnings)1 error and 0 warnings potentially fixable with the --fix option原因&#xff1a;与创建项目时选择的 eslint …...

disable_irq与disable_irq_nosync

Linux设备驱动&#xff0c;关于中断屏蔽有两个接口&#xff1a;disable_irq和disable_irq_nosync&#xff0c;该两接口使用场景如下&#xff1a; 1、disable_irq&#xff1a;在非中断处理函数中使用&#xff0c;会阻塞&#xff1b;2、disable_irq_nosync&#xff1a;在中断处理…...

#pragma warning disable的用法

#pragmawarning disable 的用法warning disable 的用法 warning disable 作用&#xff1a;让编译器忽略指定编号的警告&#xff0c;跳过警告直接运行程序&#xff0c;可用来忽略一部分不重要的警告报错 今天做操作系统课设时&#xff0c;遇到了代码#pragma warning&#xff0c…...

2.1.1.3_2 Oracle数据字典 129-41 SYS.DBMS_SCHEDULER.disable

目录一、Summary of DISABLE Procedure二、DISABLE Procedure三、DISABLE3.1 Syntax 语法3.2 执行存储过程3.3 Parameters 参数3.4 Usage Notes 使用方式3.5 Jobs 作业3.6 Programs 程序3.7 File Watchers 文件监视器3.8 Windows 时间窗口3.9 Window Groups 时间窗口组3.10 Job…...

eslint-disable-next-line

webstrom启动项目报eslint-disable-next-line to ignore the next line错误 项目一直报这个错误&#xff0c;心里一直不爽&#xff0c;我知道这个是es6对语法过多检查的但是以前尝试去解决时候&#xff0c;就是不知道该怎么配置&#xff0c;今天启动又一次触发了我对这个提示不…...

交换机端口假死(err-disable)解决方法

出现了这个问题&#xff0c;我们不得不重视起交换机端口“假死”的现象&#xff0c;寻求在交换机不重启的状态下将该端口“拯救”回来 的方法。 拯救步骤1&#xff1a;查看日志/端口的状态      登录进入交换机后&#xff0c;执行show log&#xff0c;会看到如下的提示&…...

如何在ctf解题实战中绕过disable_function

文章介绍 本文介绍将介绍ctf比赛中遇到的三种绕过disable_function的方法&#xff0c;分别为利用pcntl_exec函数&#xff0c;利用LD_PRELOAD环境变量,以及使用蚁剑的插件绕过&#xff0c;最后获得flag 具体过程 利用pcntl_exec函数 例题&#xff1a;第四届蓝帽杯总决赛-php…...

html隐藏标签disable,HTML 中 Link 元素 disable 属性详解

"disabled"属性应用场景对于 link 元素&#xff0c;当且仅当 link 元素被用来链接一个外部样式文件时&#xff0c;应用"disabled"属性定义可以切换的样式表。其功能类似于前一小节中我们提到的元素 rel 属性取值为"alternate stylesheet"时的情况…...

disable_functions绕过总结

提要 Linux 中 PHP 环境&#xff0c;已知disable_functionsexec、passthru、popen、proc_open、shell_exec、system请写出两种有可能实现任意命令执行的方式 exec <?phpecho exec(whoami);?> — 执行一个外部程序 passthru <?…...

PC_磁盘HDD_SSD/存储介质(材料工艺)

文章目录外存磁盘存储器组成磁盘驱动器磁盘控制器盘片platter存储区域磁盘结构磁道track道距位密度扇区sector&#x1f388;/块Block&#x1f386;磁头(Head)圆柱面cylinder磁记录原理磁盘性能指标记录密度磁盘的容量非格式化容量格式化容量数据传输率磁盘转速旋转周期T例平均存…...

mysql disable keys_MySQL DISABLE/ENABLE KEYS的作用

由于业务需要&#xff0c;要新建一个从库&#xff0c;由于数据量很大在导入数据的过程中&#xff0c;发现有一个processlist&#xff1a;/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;占用了很长时间&#xff0c;大概400多秒&#xff0c;等了几分钟查看进程还是这一条&#x…...