首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么修改数据库数据的查询是可等待的,而只读取数据的查询则不是?

修改数据库数据的查询是可等待的,而只读取数据的查询则不是的原因如下:

  1. 数据库的读取操作是幂等的:读取数据不会对数据本身产生任何影响,因此可以并发执行多个读取操作而不会产生冲突。多个读取操作可以同时进行,不需要等待其他读取操作的完成。
  2. 数据库的修改操作是非幂等的:修改数据会对数据本身产生变化,因此多个修改操作可能会产生冲突。为了保证数据的一致性,数据库系统会对修改操作进行加锁,确保每次修改操作的执行顺序和结果是可预测的。当一个修改操作正在执行时,其他修改操作需要等待该操作完成后才能执行,以避免数据冲突。
  3. 修改操作可能涉及到复杂的计算和数据更新:修改数据库数据可能需要执行复杂的计算逻辑和数据更新操作,这些操作可能会消耗较长的时间。为了避免长时间的等待,数据库系统可以将修改操作设置为可等待的,即提交修改请求后立即返回,然后在后台异步执行实际的修改操作。这样可以提高系统的并发性能和响应速度。

总结起来,修改数据库数据的查询是可等待的,因为修改操作可能会产生冲突,需要加锁保证数据的一致性,并且可能涉及到复杂的计算和数据更新操作,为了提高系统的并发性能和响应速度,可以将修改操作设置为可等待的。而只读取数据的查询是幂等的,可以并发执行多个读取操作,不需要等待其他读取操作的完成。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么企业数据库转向 CLOUD DATABASE 不是国产数据库

这些对于数据库有什么影响,其实就是成本问题,一个企业本身一个盈利机构,盈利机构中就必须要针对投入产出比进行衡量,IT 成本尤其机房建设本身对于企业消耗蛮大,并且这些还是一个持续性投入,...随着经济问题凸显,各个企业项目会缩减,维稳一个主基调,对于一些项目的建设大多是基于灵活性运作方式,也就是项目走一步算一步,并且灵活性很高,针对这些新项目的建设就需要评估,而在搞不清这些项目的持续回报情况下...国产数据库本身买家大部分都不是企业,而是国内政府机构,之前国内政府机构预算充足,可以进行阶段化持续性购买,并且对于投入产出比并不会进行细致估算,大多是形象项目。...在政府机构和金融卖家两方都不能再向以前“不计得失”得情况下,对于国产数据库购买和拿一些不重要项目试错行为会进一步减少,这对于未来国产数据库本身发展不是一个利好信息。...基于数据库产品,国内大部分云厂商都提供了产品,并且随着使用企业越来越多,对于产品持续迭代和快速更新也是吸引企业持续使用云上产品保证书,终究企业都是希望使用产品被验证过不是去当小白鼠。

74340

数据库数据库查询不是只知道Select就可以--关系数据库系统查询处理

关系数据库系统查询处理 一、关系数据库系统查询处理 1.查询处理步骤 关系数据库管理系统查询处理阶段 : 1)查询分析 :对查询语句进行扫描、词法分 析和语法分析 词法分析:从查询语句中识别出正确语言符号...表并与之相匹配元组连接起来 关系数据库系统查询优化 查询优化在关系数据库系统中有着非常重要地位 关系查询优化影响关系数据库管理系统性能关键因素 由于关系表达式语义级别很高,使关系系统可以从关系表达式中分析查询语义...(2)如果数据库物理统计信息改变了,系统可以自动对查询重新优化以选择相适应执行计划。在非关系系统中必须重写程序,重写程序在实际应用中往往不太可能。...如果F=F1∧F2,并且F1涉及E1中属性,F2涉及E2中属性,则由上面的等价变换规则1,4,6推出: ? 若F1涉及E1中属性,F2涉及E1和E2两者属性,仍有 ?...)+(2*B*log2B) ==查询处理关系数据库管理系统核心,查询优化技术查询处理关键技术 ==

1.2K20

闲话--为什么下一代数据库产品云原生数据库不是

为什么下一代数据库基于云原生数据库,WHY ,因为市场。...为什么云原生数据库下一代数据库,因为有市场,借用IDC 2022 一个图表,众多企业一直在往云上迁移自己IT 整体结构,单纯能支撑一个费用高昂硬件企业在未来商业格局变得,飘忽不定时代,...所以那些还在打着,本地部署数据库可以看到夕阳了,这就好比你还在生产方便面,但突然卖不动,不是因为其他方便面更便宜,是因为有了外卖,有外卖我为什么要吃方便面。...POLARDB ,POLAR-X ,等等,大概率可能,我会继续和阿里云做一个友好绑定,不是某些国产NO.1分布式数据库。...说有点远,到底云数据库是什么,云数据库本身应该是一套体系,一套可以满足客户从数据库使用,到数据库安全,数据安全,各种基于数据库周边需求和服务,注意他一套服务,不是和现在传统数据库厂商生产出来产品一样性质东西

58620

②【MySQL表操作】 数据库创建、查询修改、删除

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习路上摸爬滚打,记录学习过程~ 个人主页:.29.博客 学习社区:进去逛一逛~ 数据库创建、查询、...数据类型 数据库表中数据类型: 数值类型: TINYINT:小整数 SMALLINT:大整数 MEDIUMINT:大整数,范围大于SMALLINT INT/INTEGER:大整数,范围大于MEDIUMINT...MEDIUMBLOB:二进制形式中等长度文本数据 MEDIUMTEXT:中等长度文本数据 LONGBLOB:二进制形式极大文本数据 LONGTEXT:极大文本数据 日期类型: DATE:日期值(YYYY-MM-DD...DDL - 表操作 DDL-表操作: 查询表信息 ①查询当前数据库所有表 SHOW TABLES; ②查询表结构 DESC 表名; ③查询指定表建表语句 SHOW CREATE TABLE 表名; 创建表操作...中括号括起来可选参数,可以不写 CREATE TABLE 表名( 字段1 字段1类型 [COMMENT 字段1注释], 字段2 字段2类型 [COMMENT 字段2注释], 字段3

46750

故障分析 | 血教训-由慢查询引发备份等待导致数据库连接打满

本文来源:原创投稿 *爱生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 背景 一大早被拉去开早会,感觉事情不妙,得知某中台(发券)数据库不能正常提供访问。...于是带着疑问,1、要么有长事务没有提交,2、要么有大查询阻塞 备份原理: 备份流程图大致如下: 1、根据链接信息做数据库连通性和版本检测 2、读取数据库相关配置信息(数据和日志文件位置等信息)...binlog 文件中, flush tables 需要获取锁。...1点开始备份,也就是说这个备份一直在等待这个查询结束,符合场景3 检查数据库 sql 超时是否设置 mysql> show variables like '%exec%'; +------------...,业务库增删改查操作尽量优化到<0.2秒; 2、数据库层面:设置慢查询执行超时时间,超过了一定时间强制 kill 掉,比如查过20分钟,对于 OLTP 业务,如果一个 sql 20分钟没有执行完,那就不是

40130

故障分析 | 血教训-由慢查询引发备份等待导致数据库连接打满

本文来源:原创投稿 *爱生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 --- 背景 早上一大早被拉去开早会,感觉事情不妙,得知某中台(发券)数据库 不能正常提供访问。...于是带着疑问,1、要么有长事务没有提交,2、要么有大查询阻塞 备份原理: 备份流程图大致如下: [mawenbin0505-1.png] 1、根据链接信息做数据库连通性和版本检测 2、读取数据库相关配置信息...binlog文件中,flush tables 需要获取锁。...1点开始备份,也就是说这个备份一直在等待这个查询结束,符合场景3: 检查数据库sql超时是否设置 mysql> show variables like '%exec%'; +-------------...,业务库增删改查操作尽量优化到<0.2秒 2.数据库层面:设置慢查询执行超时时间,超过了一定时间强制kill掉,比如查过20分钟,对于OLTP业务,如果一个 sql 20分钟没有执行完,那就不是 OLTP

35110

【MySQL】DDL数据库操作:查询&创建&删除&使用(cv代码+演示图)

本章主要内容面向接触过C++ Linux老铁 主要内容含: 一.DDL-数据库操作 总览 查询 SHOW DATABASES; //查询所有数据库 SELECT DATABASE...() ; //查询当前数据库 展示所有数据库 查看当前数据库是什么(图中所示itcast) 记得加() 创建 加上[IF NOT EXISTS]:如果不存在就创建;如果存在就不执行其他操作...(省略) 加上[DEFAULT CHARSET],指定字符集(省略) 加上[COLLATE ],指定排序规则(省略) CREATE DATABASE[IE NOT EXISTS]数据库名[DEFAULTCHARSET...加上[DEFAULTCHARSET], 指定utf8mb4字符集 utf8支持3字节,utf8mb4支持4字节 删除 加上[IF NOT EXISTS]:如果不存在就删除;如果存在就不执行其他操作(省略...) DROP DATABASE[IF EXISTS]数据库名; 使用 USE 数据库名; 切换数据库

11610

Cacti 中查询MySQL数据库占用磁盘大小并返回php修改

cacti 中查询MySQL数据库占用磁盘大小并返回php修改了,但在cacti中配置了模板,可以在device中创建表格并且可以生成data source条目,但始终没有返回数据 不知道是什么问题...尝试过用script query 和script_server方式,由于还是不了解也不知道对cacti了解不够还是什么原因 始终没有返回值 哪位大神给指点下 贴这里记录下,因为之前通过snmpwalk...方式进行制作模板已经成功,没办法用自定义mib方式进行实现吧,后面再分享 data query中引用xml文件     get mysql databases...查询文件也做了修改调整了 参数 和输出方法 <?...MySQL数据库占用磁盘大小并返回php修改了 下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm

1.7K20

MySQL数据库默认隔离级别为什么重复读

一般DBMS系统,默认都会使用读提交(Read-Comitted,RC)作为默认隔离级别,如Oracle、SQLServer等,MySQL却使用重复读(Read-Repeatable,RR)。...要知道,越高隔离级别,能解决数据一致性问题越多,理论上性能损耗更大,并发性越低。...隔离级别依次为>:串行化 > RR > RC >读未提交 在SQL标准中,前三种隔离级别分别解决了幻象读、不可重复读和脏读问题。那么,为什么MySQL使用重复读作为默认隔离级别呢?...statement:记录修改SQL语句 row:记录每行实际数据变更 mixed:statement和row模式混合 那Mysql在5.0这个版本以前,binlog支持STATEMENT这种格式...(2)将binglog格式修改为row格式,此时基于行复制,自然就不会出现sql执行顺序不一样问题!奈何这个格式在mysql5.1版本开始才引入。

2.1K10

那些满脑子考虑后台数据库的人他整天研究就是针对自己查询一些数据sql语句

如果从那些满脑子考虑后台数据库的人思路出发,就很难接受这种方式,因为他整天研究不是围绕着用户千变万化交互操作需求爱好变化而是针对自己查询一些数据sql语句。...因为业务逻辑层自动化地处理前台跟系统数据关联。这时候,你可以针对同一套业务逻辑api接口开发出几十种前台应用程序,它们后台都是同一个。“三层”指前后台网络架构。...MVC前台界面程序开发时最古老一种分层方式,它表示各种图形控件(比如设计GIS中各种建筑物)并不依赖于真实数据,通过编写程序去监听控件与内存数据双向变化来进行控制(同步)。...不论三层还是MVC(这两个都是30几年以上老古董了,它们产生了许多具体模式),最终都是为了让交互设计师快速地拼生产出新软件,90%时间不是在那里写枯燥代码来创作,而是使用绘图和行为工具来所见即所地立刻就给用户做出产品修改...如果从那些满脑子考虑后台数据库的人思路出发,就很难接受这种方式,因为他整天研究不是围绕着用户千变万化交互操作需求爱好变化而是针对自己查询一些数据sql语句。

59460

通过js 将数据发送给rs485 设备,为什么要将数据转化为 Uint8Array 类型? 不是直接查询报文。如 01 03 00 00 00 14 45 C5

在JavaScript中,与RS485设备(或任何硬件设备)通信时使用Uint8Array不是直接使用查询报文字符串(如"01 03 00 00 00 14 45 C5")原因涉及到数据类型和通信协议需求...以下主要原因: 1. 二进制数据传输 通信协议:RS485和许多其他硬件通信协议使用二进制格式进行数据交换。这意味着每个指令或消息由一系列二进制值组成,不是文本字符串。...,不是字符串。...总结 使用Uint8Array不是简单字符串对于与RS485设备(或任何硬件设备)进行通信出于对二进制数据精确控制、保持与底层API兼容性、以及优化性能和效率需要。...字符串和二进制数据在底层是以不同方式表示。例如,字符串"01 03 00 00 00 14 45 C5"如果直接发送给设备,可能会被解析为ASCII码对应二进制值,不是你期望原始字节值。

7200

深入理解 MySQL 中事务隔离级别

这样他就会等待其他事务修改完之后才会执行事务,缺点就是如果并发比较多,执行会很慢 等级越高,性能消耗越大; MySQL默认重复读隔离等级; */ 大部分情况下都保持默认,在特殊情况下修改隔离等级...,如果获得失败,即加锁不成功必须等待,直到加锁成功才继续执行。...幻读与不可重复读类似,幻读查询到了另一个事务已提交新插入数据不可重复读查询到了另一个事务已提交更新数据。 简单来说,不可重复读由于数据修改引起,幻读数据插入或者删除引起。...在重复读中,该 sql 第一次读取数据后,就将这些数据加锁,其它事务无法修改这些数据,就可以实现重复读了。...有的时候我们读取数据历史数据不及时,这种我们叫它 快照读 ,读取数据库当前版本数据方式叫做 当前读 。 快照读:就是 select * from table ….

65630

大白话聊聊Innodb锁机制

线程2执行全表扫描,线程1对表中记录进行了修改,然后在线程2读取修改数据后,线程1执行回滚操作,或者线程1多次修改,但是线程2读取中间某次修改数据,那么这种情况下就会出现脏读问题 如何避免通过遍历来判断当前表是否加了行锁呢...快照数据当前行之前版本数据,通过undo段实现,undo段本身也用来在事务中回滚数据,因此读取快照数据本身没有额外开销。...注意这里范围查询不是精确查询了,范围查询更简单直接一个Gap Lock就可以了,如果含等于号情况,可以把等于号分开来,看做一次精确查询。...对于重复读隔离级别而言加锁思路不仅是对查询匹配到所有记录加X锁,还需要对每条记录之间间隙都加上Gap Lock , 防止插入导致幻读问题,当然唯一索引列精确匹配情况可以优化一下,保留Record...不可重复读和脏读区别是:脏读读到未提交数据不可重复读读到却是已经提交数据,但是其违反了数据库事务一致性要求。

67560

Mysql锁机制分析【面试+工作】

如果在加锁2时候,加锁不成功,进入等待状态,直到加锁成功才继续执行; 如果有另外一个事务获取锁时候顺序刚好相反,有可能导致死锁;为此有了一次性封锁法,要求事务必须一次性将所有要使用数据全部加锁...可以发现重复读(Repeatable read)隔离级别下,也不会出现幻读现象; 分析一下原因:如何通过悲观锁方式去实现重复读和不出现幻读现象,对读取数据加共享锁,对同样数据执行更新操作就只能等待...,这样就可以保证重复读,但是对于不出现幻读现象无法通过锁定行数据来解决; 最终看到现象是没有幻读问题,同时如果对读取数据加共享锁,更新相同数据应该会等待,上面的实例中并没有出现等待,所以mysql...为什么明明锁住type=2数据,当插入type=1也会锁等待,因为InnoDB对于行查询都是采用了Next-Key锁,锁定不是单个值,而是一个范围(GAP); 如果当前type类型包括:1,2...,一般在表中添加一个version字段;当读取数据时候把version也取出来,然后version+1,更新数据库时候对比第一次取出来version和数据库里面的version是否一致,如果一致更新成功

83120

关系数据库如何工作

如果您直接使用数组,此搜索仅花费您 log(N) 次操作不是 N 次操作。您刚才想象一个数据库索引。...(高级)物化视图重写:如果您物化视图与查询谓词子集匹配,重写器会检查视图是否最新修改查询以使用物化视图不是原始表。...写缓冲区我讨论了在使用它们之前加载数据读取缓冲区。但是在数据库中,您也有写入缓冲区,用于存储数据并将它们成批刷新到磁盘上,不是一个接一个地写入数据并产生许多单个磁盘访问。...请记住,缓冲区存储页面(最小数据单元)不是行(这是查看数据逻辑/人为方式)。如果页面已被修改且未写入磁盘,缓冲池中页面为脏页面。...但是对只需要读取数据事务使用排他锁是非常昂贵,因为它会迫使只想读取相同数据其他事务等待。这就是为什么还有另一种锁,共享锁原因。

88620

Mysql锁

意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁! 注意事项: 在不通过索引条件查询时候,InnoDB 使用表锁,不是行锁。...间隙锁触发条件命中索引,范围查询或等值查询没有匹配到相关记录。临键锁恰好相反,临键锁触发条件也是查询条件命中索引,不过,临键锁有匹配到数据库记录。...现在数据库中只有三条数据1、5、7,当修改范围为1~8时,锁定区间为(1,+∞),锁定额不单是查询范围,并且还锁定了当前范围下一个范围区间,此时,查询区间8,在数据库一个不存在记录值,并且...现在数据库有三条数据id分别是1、5、7,查询条件改为大于1小于7。由于7在数据库已知记录,所以此时锁定后,锁定了(1,7],7之后数据都没有被锁定。...我们还是可以正常插入id为8数据及其后面的数据。 所以,临键锁锁定区间和查询范围后匹配值很重要,如果后匹配值存在,锁定查询区间,否则锁定查询区间和后匹配值与它下一个值区间。

1.5K20

MySQL 中锁机制

两段锁 & 一次封锁两段锁数据库遵循两段锁协议,将事务分成两个阶段,加锁阶段和解锁阶段(所以叫两段锁)加锁阶段:在加锁阶段只能进行加锁操作。如果事务要读取对象,必须先获得共享锁。...不适合用在数据库:一次封锁不适合用在数据库中,因为在事务开始阶段,数据库并不知道会用到哪些数据。一次封锁好处:不会出现死锁。------为什么要使用两段锁呢?用完直接释放锁不行吗?...数据库系统会自动检测死锁情况,并强行中止其中一个事务以打破僵局由于使用了这么多锁机制,所以很容易出现死锁现象 ,例如事务 A 可能在等待事务 B 释放它持有的锁, 事务 B 在等待事务 A 释放它持有的锁...数据库系统会自动检测事务之间死锁情况,并强行中止其中一个事务以打破僵局,这样另一个可以继续向前执行 。被中止事务需要由应用层来重试。...能够加 Gap Lock 要求:必须重复读或以上隔离级别如果 select,必须以给读到记录加读写锁方式重复读隔离级别下 select ... for update、select ..

81920

「春招系列」MySQL面试核心25问(附答案)

InnoDB 存储引擎在分布式事务 情况下一般会用到SERIALIZABLE(串行化)隔离级别。 9、都知道数据库索引采用B+树不是B树,原因也有很多,主要原因是什么?...主要原因:B+树只要遍历叶子节点就可以实现整棵树遍历,而且在数据库中基于范围查询是非常频繁B树只能中序遍历所有节点,效率太低。 10、文件索引和数据库索引为什么使用B+树?...幻读:一般T1在某个范围内进行修改操作(增加或者删除),T2读取该范围导致读到数据修改之间了,强调范围。...丢弃修改:两个写事务T1 T2同时对A=0进行递增操作,结果T2覆盖T1,导致最终结果1 不是2,事务被覆盖 不可重复读:T2 读取一个数据,然后T1 对该数据做了修改。...B+tree磁盘读写代价更低,B+tree查询效率更加稳定 数据库索引采用B+树不是B树主要原因:B+树只要遍历叶子节点就可以实现整棵树遍历,而且在数据库中基于范围查询是非常频繁B树只能中序遍历所有节点

51030

为什么MySQL默认隔离级别是RR大厂使用RC?

为什么Mysql不选择读已提交(Read Commited)作为默认隔离级别,选择重复读(Repeatable Read)作为默认隔离级别呢?...我第一次读到1,再次读时候为2,中间有人把1修改为2,那我读取到2就没问题。RC反应真实数据变迁。主要数据真实有效(没提交就是脏读,无效),为什么怕被别人读出来呢?...存在问题: 主库数据commit到binlog后返回SUCCESS给客户端。因为binlog同步给slave异步,如果此时master提交未同步给到slave,数据发生丢失。...在RC隔离级别下其他事务可以读取。如果在等待slaveack过程中binlog还没传输到slave上,其他事务查询数据修改数据,此时master宕机。slave上升为master。...此时在查询新master查询不到数据,出现幻读。 数据丢失:提高数据安全性,但不能完全避免数据丢失。

40910

mysql 面试总结

已提交读: 如果想防止脏读,就需要等待其他事务提交后再进行读取操作。 重复读: 已提交读隔离级别考虑到了数据回滚无效性,却无法阻止事务多次提交。...为了让事务 B 在执行期间读取数据都是一致,就有了重复读隔离级别,即事务 B 在执行期间,其他事务不得进行修改操作。 串行化: 上面的重复读隔离级别保证了事务执行期间读取一致性。... redo log 一个数据修改日志,偏向于结果记录。...如果在更新数据时,发现有其他事务修改了属于自己数据,则会回滚之前一切操作。 悲观锁:采取了先获取锁再访问保守策略,如果已经有其他事务获取了锁,必须等待锁释放才能继续。...UNION ALL:将所有的数据联合起来,即使有重复数据 UNION:会合并重复数据 12. 为什么尽量使用自增 ID,不是 UUID?

42401
领券