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

为什么Propagation.NOT_SUPPORTED要更改生成的select语句?

Propagation.NOT_SUPPORTED是Spring框架中的一个事务传播属性,用于控制事务的行为。在数据库操作中,事务是一种保证数据一致性和完整性的机制,它可以将一系列的数据库操作作为一个原子性操作,要么全部成功,要么全部失败回滚。

当使用Propagation.NOT_SUPPORTED时,表示当前方法不会参与到任何事务中,即使当前存在事务,也会将其挂起。这样做的目的是为了在某些特定场景下,避免事务的干扰,提高性能和效率。

在生成的select语句中使用Propagation.NOT_SUPPORTED的主要原因有以下几点:

  1. 读取数据不需要事务支持:在某些场景下,只需要读取数据库中的数据而不进行任何修改操作,此时事务的支持是不必要的。通过将事务传播属性设置为Propagation.NOT_SUPPORTED,可以避免不必要的事务开销,提高读取性能。
  2. 避免锁竞争和死锁:事务的并发控制机制中,会使用锁来保证数据的一致性。当多个事务同时操作同一数据时,可能会出现锁竞争和死锁的情况。在某些读取密集型的场景下,通过将事务传播属性设置为Propagation.NOT_SUPPORTED,可以避免不必要的锁竞争和死锁问题。
  3. 提高并发度和性能:事务的开销包括事务的启动、提交和回滚等操作,这些操作会消耗一定的系统资源。在某些高并发的场景下,通过将事务传播属性设置为Propagation.NOT_SUPPORTED,可以减少事务的开销,提高系统的并发度和性能。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云数据库 MySQL:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云数据库 PostgreSQL:https://cloud.tencent.com/product/cdb_postgresql
  • 腾讯云数据库 SQL Server:https://cloud.tencent.com/product/cdb_sqlserver
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云移动开发(MPS):https://cloud.tencent.com/product/mps
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

第三篇:为什么 React 16 更改组件生命周期?(下)

改变背后第一个“Why”:为什么要用 getDerivedStateFromProps 代替 componentWillReceiveProps?...这里我举一个非常有代表性例子:实现一个内容会发生变化滚动列表,要求根据滚动列表内容是否发生变化,来决定是否记录滚动条的当前位置。...每当执行完一个小任务时,渲染线程都会把主线程交回去,看看有没有优先级更高工作处理,确保不会出现其他任务被“饿死”情况,进而避免同步渲染带来的卡顿。...总的来说,render 阶段在执行过程中允许被打断,而 commit 阶段则总是同步执行为什么这样设计呢?...而 commit 阶段操作则涉及真实 DOM 渲染,再狂框架也不敢在用户眼皮子底下胡乱更改视图,所以这个过程必须用同步渲染来求稳。

1.2K20

第二篇:为什么 React 16 更改组件生命周期?(上)

生命周期背后设计思想:把握 React 中“大方向” 在介绍具体生命周期之前,我想先带你初步理解 React 框架中一些关键设计思想,以便为你后续学习提供不可或缺“加速度”。...虚拟 DOM:核心算法基石 组件在初始化时,会通过调用生命周期中 render 方法,生成虚拟 DOM,然后再通过调用 ReactDOM.render 方法,实现虚拟 DOM 到真实 DOM 转换...当组件更新时,会再次通过调用 render 方法生成虚拟 DOM,然后借助 diff(这是一个非常关键算法,我将在“模块二:核心原理”重点讲解)定位出两次虚拟 DOM 差异,从而针对发生变化真实... ); } } 前面咱们介绍了虚拟 DOM、组件化,倘若把这两块知识整合一下,你就会发现这两个概念似乎都在围着 render 这个生命周期打转:虚拟 DOM 自然不必多说,它生成都要仰仗...至于组件里面为什么设置 key,为什么 key 改变后组件就必须被干掉?要回答这个问题,需要你先理解 React “调和过程”,而“调和过程”也会是我们第二模块中重点讲解一个内容。

1.1K10

都是同样条件mysql select语句为什么读到内容却不一样?

为什么同样条件下,都是读,读出来数据却不一样呢? 可重复读不是要求每次读出来内容一样吗? 要回答这个问题。 我需要从盘古是怎么开天辟地这个话题开始聊起。 不好意思。 失态了。...当前读和快照读 我们平时执行普通select语句,比如下面这种,就是快照读。...select * from user where phone_no=2; 而特殊select语句,比如在select后面加上lock in share mode或for update,都属于当前读。...这样就能做到每次都读到其他事务最新已提交数据。 可重复读隔离级别下事务只会在第一次执行普通select生成read view,后续不管执行几次普通select,都会复用这个 read view。...都是select结果却不同 在线程1启动事务,我们假设它事务trx_id=2,第一次执行普通select,是快照读,在可重复读隔离级别,会生成一个read view。

21210

@Transactional千万不要这样用!!踩坑了你都可能发现不了!!!

问题代码1 下面的这段代码主要是想利用MySQL里面的行锁select for update,来实现简单分布式锁。...从上面的时序图也可以看到,只有当事务方法被当前类以外代码调用时,才会由Spring生成代理对象来管理。...下面是更改之后代码,更改之后发现事务生效了,问题解决!...但是这种以排他方式来控制并发事务,串行化执行方式会导致事务排队,系统并发量大幅下降,使用时候绝对慎重。...因为它只“保护”了它读取数据不被修改,但是其他数据会被修改。如果其他数据被修改后恰好满足了当前事务过滤条件(where语句),那么就会发生“幻影读”情况。

56920

详细整理Spring事务失效具体场景及解决方案

语句块捕获,而catch语句块没有throw new RuntimeExecption异常;(最难被排查到问题且容易忽略) 注解@Transactional中Propagation属性值设置错误即Propagation.NOT_SUPPORTED...为什么会失效呢?...:其实原因很简单,Spring在扫描Bean时候会自动为标注了@Transactional注解生成一个代理类(proxy),当有注解方法被调用时候,实际上是代理类调用,代理类在调用之前会开启事务...注意:一定要注意启动类上添加@EnableAspectJAutoProxy(exposeProxy = true)注解,否则启动报错: java.lang.IllegalStateException:...,不支持事务 @Transactional(propagation = Propagation.NOT_SUPPORTED,rollbackFor = Exception.class) public

1K20

Spring 事务失效 8 大场景

然后 debug 跟踪代码时发现,自己第一步 insert 或者 update 数据在语句执行完毕后,数据库中并没有立即出现更改或保存完新数据。所以一度怀疑spring 事务失效了。...异常被吃了 异常类型错误 下面展开分析每一个场景: 数据库引擎不支持事务 这里以 MySQL 为例,其 MyISAM 引擎是不支持事务操作,InnoDB 才是支持事务引擎,一般支持事务都会使用...开始默认存储引擎是:InnoDB,之前默认都是:MyISAM,所以这点值得注意,底层引擎不支持事务再怎么搞都是白搭。...Propagation.NOT_SUPPORTED: 表示不以事务运行,当前若存在事务则挂起。...public void update(Order order) { updateOrder(order); } @Transactional(propagation = Propagation.NOT_SUPPORTED

42140

Spring 事务失效 8 大场景,看看你都遇到过几个?

然后 debug 跟踪代码时发现,自己第一步 insert 或者 update 数据在语句执行完毕后,数据库中并没有立即出现更改或保存完新数据。 所以一度怀疑spring 事务失效了。...下面展开分析每一个场景: 数据库引擎不支持事务 这里以 MySQL 为例,其 MyISAM 引擎是不支持事务操作,InnoDB 才是支持事务引擎,一般支持事务都会使用 InnoDB。...:InnoDB,之前默认都是:MyISAM,所以这点值得注意,底层引擎不支持事务再怎么搞都是白搭。...Propagation.NOT_SUPPORTED:表示不以事务运行,当前若存在事务则挂起。...public void update(Order order) { updateOrder(order); } @Transactional(propagation = Propagation.NOT_SUPPORTED

60630

Oracle 分页查询

,它会根据返回记录生成一个序列化数字。...a、利用查询需要进行分页结果集,然后根据然会结果集生成rownum select rownum,a.* from (select * from emp) a 左图红框内结果集是rownum生成行序号...) where rn>=6 其实到这一步,还是会有很多人不明白为什么上面的a为什么那样查询整个结果集,并给结果集生成一个rownum,明明可以像下面这样写: select rownum,a.* from...emp a; 现在告诉为什么这样写: 因为这样写方便管理我们查询字段,将我们字段和实际排序过程分开,更好控制排序,如果我们这里不需要查询所有的字段,而只需要查询JOB、MGR、SAL三个字段我们就可以这样改...,而且如果这边查询需要根据某个字段进行排序,这边更是无法处理,所以这个代码扩展性很差,而上面的只需要更改红框内结果集就行了。

3K80

MySQL重大Bug!自增主键竟然不是连续递增

要使用此语句,必须对该表具有一定权限。此语句也适用于视图。 更改存储引擎时,不适用于新存储引擎表选项会保留在表定义,以便在必要时将具有先前定义选项表恢复到原始存储引擎。...若插入数据时id字段指定了具体值,则使用语句里指定值 根据插入值和当前自增值大小关系,假设插入值X,而当前自增值Y,若: X X≥Y,把当前自增值修改为新自增值 自增值生成算法 从 auto_increment_offset...为什么默认设置下insert … select 偏偏要使用语句级锁?为什么该参数默认值不是2? 为了数据一致性。...解决该问题,有如下方案: 让原库批量插入数据语句,固定生成连续id值 所以,自增锁直到语句执行结束才释放,就是为了达此目的 在binlog里把插入数据操作都如实记录进来,到备库执行时,不依赖自增主键去生成...既然不知道申请多少个自增id,那么最简单就是需要一个时申请一个。但若一个select … insert插入10万行数据,就要申请10w次,速度慢还影响并发插入性能。

3.5K10

MySQL重大Bug!自增主键竟然不是连续递增

要使用此语句,必须对该表具有一定权限。此语句也适用于视图。 更改存储引擎时,不适用于新存储引擎表选项会保留在表定义,以便在必要时将具有先前定义选项表恢复到原始存储引擎。...若插入数据时id字段指定了具体值,则使用语句里指定值 根据插入值和当前自增值大小关系,假设插入值X,而当前自增值Y,若: X<Y,则该表自增值不变 X≥Y,把当前自增值修改为新自增值 自增值生成算法...为什么默认设置下insert … select 偏偏要使用语句级锁?为什么该参数默认值不是2? 为了数据一致性。...解决该问题,有如下方案: 让原库批量插入数据语句,固定生成连续id值 所以,自增锁直到语句执行结束才释放,就是为了达此目的 在binlog里把插入数据操作都如实记录进来,到备库执行时,不依赖自增主键去生成...既然不知道申请多少个自增id,那么最简单就是需要一个时申请一个。但若一个select … insert插入10万行数据,就要申请10w次,速度慢还影响并发插入性能。

2.6K00

MySQL默认隔离级别是RR,但是为什么一些大厂会改成RC?

记录是SQL语句原文。...在RC中,每次读取都会重新生成一个快照,总是读取行最新版本。也因此事务中每次select也可以看到其它已commit事务所做修改。...在RR中,快照会在事务中第一次查询语句执行时生成,只有在本事务中对数据进行更改才会更新快照。...也就是说,如果在本事务中已经执行了一次select,此时其它事务执行了更改数据操作并已提交,那么你在本事务再次select时,你是看不到其它事务所做更改。...因为RC在加锁过程中,是不需要添加Gap Lock和Next-Key Lock,只需要对修改记录添加行级锁就行了。另外,RC还支持半一致读,可以大大减少了更新语句时行锁冲突。

1.3K20

T-SQL进阶:超越基础 Level 9:动态T-SQL代码

编写动态TSQL时,您需要了解动态代码如何打开SQL注入攻击可能性。 在本文中,我解释了为什么你可能想要使用动态TSQL以及如何生成动态TSQL。...@CMD来保存构建动态SELECT语句,并使用@Table变量来保存表名。...构建我实际动态TSQL语句,我使用一个SET语句。 此语句将变量@CMD设置为包含SELECT语句和@TABLE变量值级联字符串值。...添加了一个SET语句,设置变量@WildCardParm将通配符(%)放在@EnteredText参数开头和结尾。 更改了字符串@CMD执行方式。...而不是使用EXEC语句来执行字符串,我使用过程sp_executesql。 通过进行这两个更改,用户输入文本现在将作为参数驱动查询执行。

1.9K20

解释SQL查询计划(一)

可以决定使用反映对表定义所做更改修改后查询计划。 或者可以冻结当前查询计划,保留在更改表定义之前生成查询计划。 根据对表定义所做更改,确定是否对对该表执行SQL操作例程进行代码更改。...注意:SQL语句是一个SQL例程列表,它们可能会受到表定义更改影响。 它不应该用作表定义或表数据更改历史记录。...列出超过10,000条SQL语句,请使用INFORMATION_SCHEMA.STATEMENTS。 页面大小和最大行选项是用户自定义。...其他差异如下: 如果从Management Portal接口或SQL Shell接口发出查询,所得到SQL语句与在SELECT语句前面加上DECLARE QRS CURSOR FOR(其中“QRS”可以是各种生成游标名称...SQL语句文本在1024个字符之后被截断。 查看完整SQL语句文本,请显示SQL语句详细信息。 一个SQL命令可能会产生多个SQL语句

2.9K20

MySQL写马详解

报错原因及修改方法为:参数为只读参数,需要在mysql.ini配置文件中更改该参数,之后重启数据库 将secure_file_priv为空正确方法(注意NULL不是我们空,NULL和空类型不一样...id=1 union select 1,2,select '';这样,不能执行set。 (2)有堆叠注入,先?...堆叠注入局限性在于并不是每一个环境下都可以执行,可能受到API或者数据库引擎不支持限制,当然了权限不足也可以解释为什么攻击者无法修改数据或者调用一些程序。...(3)再者就是已经成功登录到别人数据库里了,先set global general_log_file='...php';,然后直接执行select '<?...报错原因及修改方法为:参数为只读参数,需要在mysql.ini配置文件中更改该参数,之后重启数据库 将secure_file_priv为空正确方法(注意NULL不是我们空,NULL和空类型不一样

1K10

注入学习之sqli-labs-4(第三关)

没错,接下来,我们就是这么做。但在这之前,我们先去学习一下mysql数据库一些函数,利用这些函数,我们就可以达到我们想要目的!...接着往下看 1 先选中当前数据库 和 concat函数 ? 0x3a主要是作为分割符号使用,通过concat 连接在一起。 为什么加分割符号呢?...同样,也可以查询字段数量,只需稍微更改语句informatio_schema.tables 为informatio_schema.columns 4 把上面的语句增加一个count()函数,该函数作用前面有讲...接下来我们只要把database()换成我们查询语句,就可查处我们信息 ?...通过更改limit 1,1 limit 3,1 为users表 我们测试 users 语句为 http://127.0.0.1/Less-5/?

1.1K60

MySQL 教程下

如果更新视图不存在,则第 2 条更新语句会创建一个视图;如果更新视图存在,则第 2 条更新语句会替换原有视图。...; 更新视图 迄今为止所有视图都是和 SELECT 语句使用。...创建保留点: savepoint delete1; 回滚到指定保留点: rollback to delete1; 保留点越多越好 可以在 MySQL 代码中设置任意多保留点,越多越好。为什么呢?...更改默认提交行为 默认 MySQL 行为是自动提交所有更改。换句话说,任何时候你执行一条 MySQL 语句,该语句实际上都是针对表执行,而且所做更改立即生效。...-u 用户名 -p密码 数据库名 < 生成脚本路径 2、SOURCE 命令导入 SOURCE 命令导入数据库需要先登录到数库终端: SOURCE c:/mydb.sql 生成脚本文件不包含 CREATE

1K10

Oracle-Soft ParseHard ParseSoft Soft Parse解读

---- 软软解析过程 完全理解软软解析先要理解游标的概念,当执行SQL时,首先要打开游标,执行完成后,关闭游标,游标可以理解为SQL语句一个句柄。...---- 语义及权限检查 语法正确SQL语句在解析第二个步骤就是判断该SQL语句所访问表及列是否准确?用户是否有权限访问或更改相应表或列?...那么为什么Oracle需要再次对语句文本进行检测呢?不是SQL语句HASH值已经对应上了?事实上就算是SQL语句HASH值已经对应上了,并不能说明这两条SQL语句就已经可以共享了。...尽管查询表对象使用了大小写,但Oracle为其生成了不同执行计划  select * from emp;  select * from Emp;  select * from EMP;   2....,生成不同执行计划 ---- 硬解析弊端 硬解析即整个SQL语句执行需要完完全全解析,生成执行计划。

2.2K20

POSTGRESQL pg_stat_activity 一个表360度对PG管理

active比例之间达到80%,那就需要关系后续最大连接数和先关缓冲池是不是建立起来了。...2 查看当前事务一般运行时间,如果运行时间中transaction时间比较长,那就需要注意 idle in transaction 查询时间,为什么事务打开这么长时间,还没有执行完毕。...,实际上最好还是生成执行语句,然后在通过人工来进行,而不是全自动,万一有一些是需要进行长期运行语句。...另外还有一个问题就是展开我们pg_stat_activity语句query 语句长度问题,实际上这的确是一个问题,展示不全语句不利于我们对情况进行分析。...show track_activity_query_size; 那么我们可以更改 track_activity_query_size 然后重新启动我们postgresql 所以这个变量需要在安装PG时候就进行一个设置

1.2K41
领券