不能在一个只读模式的事务中执行INSERT

编程入门 行业动态 更新时间:2024-10-09 20:21:51

不能<a href=https://www.elefans.com/category/jswz/34/1770445.html style=在一个只读模式的事务中执行INSERT"/>

不能在一个只读模式的事务中执行INSERT

目录
环境
症状
问题原因
解决方案

环境
系统平台:Linux x86-64 Red Hat Enterprise Linux 7
版本:4.5
症状
JavaSpring+Mybatis程序,Spring管理事务,运行报错:“不能在一个只读模式的事务中执行INSERT”。

org.springframework.jdbc.UncategorizedSQLException:  ### Error updating database.  Cause: com.highgo.util.PSQLException: 错误: 不能在一个只读模式的事务中执行INSERT### The error may involve community.persistence.UserMapper.insertUser-Inline ### The error occurred while setting parameters ### SQL: INSERT INTO         cs_user   (id,         nick_name,         login_name,         login_pwd,         email,         phone,         identity_card,         createTime,         updateTime)         VALUES         (?,         ?,         ?,         ?,         ?,         ?,         ?,         ?,         ?); ### Cause: com.highgo.util.PSQLException: 错误: 不能在一个只读模式的事务中执行INSERT ; uncategorized SQLException for SQL []; SQL state [25006]; error code [0]; 错误: 不能在一个只读模式的事务中执行INSERT; nested exception is com.highgo.util.PSQLException: 错误: 不能在一个只读模式的事务中执行INSERT

问题原因
Spring的Read-only事务只会看到在这个事务开启时间点其他事务提交过的数据,并且不允许执行INSERT, UPDATE,DELETE语句,换句话说,在设置set transaction read only后,当前会话所见的数据图像,将不再受到其他会话事务的影响。所以瀚高、Oracle支持的只读事务不是为了优化性能,而是为了让这个事务中所有的查询操作看到的数据是一个时间点(开启事务)上的一致数据。MYSQL、SQL_SERVER根本没有只读事务的概念,之前使用MySQL时,该参数没有生效,所以未报错。

解决方案
将该事务修改为readOnly=false,如下:

更多推荐

不能在一个只读模式的事务中执行INSERT

本文发布于:2024-02-07 04:35:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1753701.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:在一   事务   模式   INSERT

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!