MySQL锁与事务

MySQL事务和锁 作者:IT王小二 博客:https://itwxe.com MySQL是怎么解决并发事务所产生的问题呢?又借助了哪些锁的思想呢?这篇小二给小伙伴们继续唠一唠MySQL的那些事。 一、事务是什么 事务是由一组SQL语句组成的逻辑处理单元,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。通常有下面4个特性,也就是咱程序猿俗称的ACID属性。 原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全部执行,要么全部不执行。举个例子:情人节小二给女朋友转账520块,那么SQ. 阅读详情
以前只知道数据库的增删改查,熟用create 、insert into、update、delete from、select等。平常自己一条一条用起来自我感觉良好,根本不会出现什么问题。可是一旦与真实的产品结合起来,就没有想的那么简单了。产品需要保证数据的可靠性和稳定性,得应对并发情况,毕竟产品不是一个人玩。这很容易让人想到”锁“这个东西,编程的人都知道,多线程的时候,会采用“加锁”“解锁”的方式来保证共享数据不会乱,那对于数据库呢?其实数据库也有“锁”,这就涉及到数据库”事务“的概念。

数据库中的“锁”机制。
共享锁:由读表操作加上的锁,其他操作只能读,不能写。
排它锁:由写表操作加上的锁,其他操作既不能读也不能写。
锁的范围,可以针对 表,也可以针对行,这样就有了:
表共享锁、行共享锁、表排它锁,行排它锁。


利用数据库的锁机制,生成了四种隔离策略,它们分别是:
1、未提交读(READUNCOMMITTED)。另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据(脏读)。
2、提交读(READCOMMITTED)。本事务读取到的是最新的数据(其他事务提交后的)。问题是,在同一个事务里,前后两次相同的SELECT会读到不同的结果(不重复读)。
3、可重复读(REPEATABLEREAD)。在同一个事务里,SELECT的结果是事务开始时时间点的状态,因此,同样的SELECT操作读到的结果会是一致的。但是,会有幻读现象。
4、串行化(SERIALIZABLE)。读操作会隐式获取共享锁,可以保证不同事务间的互斥。
InnoDB存储引擎默认是重复读的隔离策略,所以,我个人觉得可以这样理解:我们使用InnoDB存储引擎建表时,我们就已经考虑到了并发操作的情况,而可重复读隔离策略就相当于打包的锁机制,形成的一种策略,当我们把隔离策略设置成它的时候,就相当于在利用此策略解决并发问题。个人一般不自己去定义利用锁定义策略,因为定义不好的话,容易出现死锁等问题。所以,在开发过程中,根据实际情况设置一下隔离策略就行了。

什么是事务?
事务就是逻辑上的一组操作,这一组操作要么都成功,要么都失败,以保证数据库里的数据安全。以数据库插入操作举例,有时候想在某张表中插入一条记录的时候,往往需要在另一张表里要先插入一条记录,这时候,在这两个表里插入记录就组成了一个事务,要么两个表都插入成功,如果这两张表有一张插入出现问题,那么两张表都需要保持插入之前的状态。

MySQL事务处理的方法:
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
      set autocommit=0   禁止自动提交
      set autocommit=1 开启自动提交
下面是MySQL API函数:
//连接数据库
	MYSQL *conn;
	conn = mysql_init(NULL);
	
	if(mysql_real_connect(conn,DataBaseIP,  DataBaseUser, DataBasePwd,DataBaseDatabase, 0, NULL, 0))
	{
		mysql_autocommit(conn,0);//禁止自动提交
	}
//..............(执行一系列QUERY语句),每一条执行完之后,判断是否执行成功,如果执行失败,则在那一条语句后面,用mysql_rollback(conn);回滚到之前的状态。
	//如果所有语句都执行成功
	//则mysql_commit(conn);确认提交



但是使用事务管理得有一个前提条件:
表的存储引擎必须是InnoDB(mysql的默认存储引擎)。
查看某个表的存储引擎:show create table 表名;

梳理一下:
我们要处理并发,又懒得自己去设计策略,那就在建表时使用InnoDB,为什么呢?因为它支持事务处理。
为什么需要事务处理呢?因为事务处理可以设置不同的隔离策略解决并发问题,省了我们自己根据锁机制去设计并发控制策略。
mysql建表默认存储引擎InnoDB,默认隔离策略是“可重复读”。
这样,我们只需将事务提交设置为手动提交即可。
什么时候提交?一个事务中的操作都没错的时候我们就提交。

地平线RDKX3初始配置与USB无线网卡 地平线X3无线网卡配置 阅读详情

相关推荐

LangGraph实战:如何用循环机制优化你的LangChain Agent工作流

本文详细介绍了如何使用LangGraph的循环机制优化LangChain Agent工作流,解决传统AgentExecutor在强制工具调用、动态提示调整和多阶段循环中的局限性。通过状态机和显式状态图设计,LangGraph提供了更精准的流程控制能力,适用于复杂AI应用场景。

weixin_30316097的博客 486

详解MySQL事务与锁

事务和锁在 MySQL 中是非常重要的一部分,锁和事务对 MySQL 的数据访问并发有着举足轻重的影响,涉及到的知识篇幅很多,需要静下心好好反反复复几遍地细细品味。本文是对MySQL的事务和锁的整理,一些相关深入的细节,还是需要找到相关书籍来继续夯实

FlyingFish868的博客 1077

滑模控制算法——基本原理(附MATLAB程序)

选择一个滑模面和是设计参数。是滑模面函数,通常我们希望系统状态在的面上滑动。我们以一个简单的二阶系统作为示例,其状态空间方程为:是系统矩阵是输入矩阵是输出矩阵假设我们的系统如下:滑模控制算法的核心在于设计合适的滑模面和控制律,并分析系统在滑模面上的稳定性。通过上述公式和步骤,可以有效地设计滑模控制器,以处理具有非线性和不确定性的动态系统。总的来说,滑模控制算法因其鲁棒性和灵活性在处理复杂控制问题中表现出色,但在实际应用中需要精心设计以克服抖振现象和其他潜在问题。BuxuABDC。

qq_35623594的博客 2万+

MySql的事务和锁详解

数据库事务详细说明,事务实现原理,锁类型,锁的使用,MVCC多版本控制,分布式事务概要说明等

m0_37685866的博客 2017

UVM环境复位--stop_sequences()

在UVM验证环境中, stop_sequences是一个用于强制终止所有正在运行的 Sequence 的方法,通常用于动态控制激励生成流程。1.通过uvm_config_db传递事件和严格的同步机制,此方案符适用于复杂复位场景和动态测试控制。组件耦合:Driver 和 Sequence 不再直接依赖env,通过标准接口通信。竞争条件:确保 Driver 完成清理后再终止 Sequence。代码健壮性:使用非阻塞操作和事件监听,避免死锁。

qq_42779035的博客 3013

小论文/大论文必备 | YOLO多模态目标检测、绘制曲线对比图 | 引入多种绘制曲线对比图,包括mAP0.5,mAP0.5:0.95,Loss损失变化的曲线对比

本文通过可视化方法分析YOLO多模态模型的训练过程,对比不同实验的检测精度和损失函数变化。主要内容包括:1)绘制mAP@0.5和mAP@0.5:0.95曲线评估检测精度;2)分析边界框回归损失(box_loss)、分类损失(cls_loss)和分布式损失(dfl_loss)的收敛趋势;3)提供完整的Python代码实现,支持多实验对比,可生成高清曲线图。该方法能直观展示模型训练效果,便于优化策略评估和参数调优。

Ai缝合怪、助力小伙伴高效发论文 260

MySql详解(三)--锁和事务篇

Mysql-详解,看这篇就够了

qq_35105015的博客 1315

《八》:玩家位置同步(玩家防碰撞)

在VR大空间体验中,由于玩家佩戴头显设备无法直接观察彼此位置,容易发生碰撞。因此,需要将玩家的实时位置信息绘制在虚拟空间中,实现位置可视化。通过获取头显的位置和旋转角度等数据,可以推算出玩家的移动状态和位置。使用可序列化的玩家结构体,通过UDP将玩家数据发送到服务器,服务器接收并反序列化数据后,同步所有玩家的最新信息至各客户端。客户端根据接收到的数据渲染虚拟人物模型,实现动态位置更新。这一过程涉及数据序列化、反序列化、网络通信和实时渲染等技术,确保玩家在虚拟空间中的位置同步和可视化。

unitygroup的博客 412

MySQL的事务与锁

在现实生活中,人们通过银行互相转账和汇款,从数据的角度来看,这实际上就是数据库中两个不同账户之间的数据操作。例如,用户A向用户B转账了1000元,则A账户的余额减去1000元,B账户的余额加上1000元,整个过程需要使用两条SQL语句来完成操作,若其中一条语句出现异常没有被执行,则会导致两个账户的金额不同步,从而使数据出现错误。为了避免上述情况的发生,MySQL中可以通过开启事务来进行数据操作。用户转账过程中,只有事务执行成功后数据才会变更,如果事务执行失败,数据库中的值将不会变更。

qq_56370103的博客 1395

vue2/3 - 【超详细】最新网站接入使用支付宝支付功能,点击支付跳转新页面后生成订单及支付二维码,实现支付宝在线付款详细的教程(整个支付的完整配置及支付流程,一键复制源码开箱即用)!

vue支付宝付款,vue支付宝支付,vue如何实现支付宝在线付款,vue网页pc项目接入支付宝支付,vue支付宝支付详细教程,vue2支付宝在线支付的详细示例代码,vue如何做支付宝付款,vue怎么实现支付宝的付款功能,vue调用支付宝进行付款支付,vue PC项目实现 支付宝支付,vue h5页面调用支付宝支付,vue页面唤起支付宝支付功能,vue支付宝支付跳转到新页面,vue如何跳转新开一页展示支付宝二维码支付,vue怎么新开页面进行支付宝在线支付,vue新页面支付宝支付功能,前端vue支付宝支付教程,

✅ 精选推荐文章 5729

【读论文】ASR大模型动态热词新方案

大型语言模型(LLMs)以其卓越的通用知识和推理能力重塑了 AI 领域,但它们在处理特定领域或用户的专有词汇(即“热词”)时,往往表现出“选择性失忆”。传统的 RAG 或 Prompting 方案在实时性和准确性上存在瓶颈。阿里的《Hotword Model for Large Models》论文提出了一种“神经插件”方案,它能够在不修改基座模型权重的前提下,动态、精准地将热词能力注入到生成过程中。本文将从架构设计、训练范式到推理逻辑,全方位拆解这一技术的内核,并探讨其在工业级应用中的价值。

kakaZhui的博客 290

MySql 事务 & 锁

一组逻辑操作单元,使数据从一种状态变换到另一种状态。保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),那么这些修改就永久地保存下来;要么数据库管理系统将放弃所作的所有修改,整个事务回滚(rollback)到最初状态。

cimbala的博客 830

Allegro技巧----相同模块复用实现快速布局

使用Allegro软件进行PCB Layout设计时,当电路图中有很多路相同的模块,使用模块复用的的操作方法,可以显著提高工作效率,同时也可以使PCB布局在整体上显得美观。 如图,有8个相同的ADC采样电路模块,它们在原理图中的电路也是一样的,对于这多个相同的电路模块,如果一个个元器件布局很明显做了很多重复机械的劳动,效率低下;但是强大的Allegro软件早就考虑到了这点,只需要在PCB中做好其中的一个,则其余相同的模块通过复用的方式,可以快速完成,方便省事还美观。 具体步骤: 1.首先完成一个模块的PC

sinat_15677011的博客 5653

MySQL-事务与锁

本文将总结关于事务、事务隔离级别和数据库中的锁相关内容。

qq_74092815的博客 1011

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IEM模型,地表粗糙度模拟

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

MySQL的事务以及锁详解

老铁有一提问“MySQL的可重复读级别能解决幻读吗”,一听就有猫腻,实话说,之前从未思考到这个问题,很是懵逼,于是深入查看,发现了自己的细节欠缺是在太多,补上! 事务基础知识: 数据库原理理论 事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。在关系数据库中,一个事务可以是一组SQL语句或整个程序。

qq_22162093的博客 2723

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

MySQL -事务、锁

MySQL事务以及锁

weixin_64612849的博客 1091

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

mysql 锁与事务

mysql 锁与事务 锁 按锁级别划分:共享锁与排他锁 共享锁(读锁):其他事务可以读,但不能写。多个共享锁是可以并行的 共享锁就是只针对update时候加锁,在未对update操作提交之前,其他事务只能够获取最新的记录但不能够update操作。 排他锁(写锁) :其他事务不能读取,也不能写。 一开始就对记录上锁了,在本事务未提交之前别的事务无权进行任何操作 按锁的粒度划分:表级锁,行级锁和页级锁(mysql BDB支持) 表级锁和行级锁对比: 表级锁: MySQL 中锁定 粒度最大 的一种锁

weixin_45515047的博客 1469

MySQL事务与锁

MySQL事务与锁是紧密相连的整体,需要互相配合使用,本文介绍了事务的隔离级别、共享锁、独占锁、间隙锁、记录锁、next-key锁,索引与锁的关系、以及MySQL默认隔离级别选择可重复读的原因、纠正多数博客对“幻读”的错误理解。

weixin_44922510的博客 893

Mysql之锁与事务

Mysql之锁与事务

IT__LS的博客 1635

【MySQL】剖析事务和锁

使用事务而不是使用 LOCK TABLES 语句手动加锁,并使用 innodb_lock_wait_timeout 变量设置锁的超时时间,保证任何情况下锁都可以自动释放。 经常使用 SHOW ENGINE INNODB STATUS 命令来确定最近一次死锁的原因。这可以帮助我们修改应用程序以避免死锁。 如果出现频繁的死锁警告,可以通过启用 innodb_print_all_deadlocks 变量来收集调试信息。对于死锁的信息,都记录在 MySQL 错误日志中,调试完成后记得禁用此选项。 如果事务由于死锁而

2302_79806056的博客 1115

Mysql事务与锁的原理

1、事务的特性与事务并发造成的问题 2、事务读一致性问题的解决方案 3、MVCC的原理 4、锁的分类、行锁的原理、行锁的算法

weixin_41300437的博客 834

【MySQL】事务、锁

MySQL数据库事务和锁

低调做人,低调编码,神码都是浮云 1753

mysql中的锁和事务

本文系统介绍了MySQL中的事务与锁机制。首先阐述了事务的ACID特性(原子性、一致性、隔离性、持久性)及其隔离级别(Read Uncommitted、Read Committed、Repeatable Read、Serializable),分析了不同隔离级别下可能出现的脏读、不可重复读和幻读问题。然后详细讲解了MySQL的锁机制,包括全局锁、表级锁(表锁、元数据锁、意向锁)和行级锁(记录锁、间隙锁、临键锁),重点说明了各种锁的适用场景、加锁方式及兼容性关系。文章最后特别指出InnoDB在Repeatabl

m0_71857053的博客 906
上一篇: vs2010中C++生成lib和dll文件
下一篇: MySQL插入数据后返回自增id的方法
csdnning
博客等级 码龄13年 1粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值