执行SQL语句的时候唯一约束字段异常Duplicate entry '33382-1-0' for key xxx
前言:做项目的时候,执行SQL语句报了Duplicate entry '33382-1-0' for key xxx异常,后来发现是唯一约束导致,于是乎一通谷歌百度,后来解决了,记录一下。
正文:
代码片段是这样的:
session.createSQLQuery("insert ignore student_task_trace (student_id,task_plan_id,task_plan_reads_options_id,question_count,finish_count,creation_time,modify_time) " +
"select s.id,:taskPlanId,:planReadsOptionsId,:questionCount,0,NOW(),NOW() from student as s where s.clazz_id in :clazzIdList")
.setParameter("taskPlanId", taskPlanId).setParameter("planReadsOptionsId",tproId)
.setParameter("questionCount", count).setParameterList("clazzIdList", clazzIds).executeUpdate();
可以看到涉及到数据库的表是student_task_trace 。
表的结构式这样的:
看的出来不仅主键id做了唯一约束,student_id,task_plan_reads_options,sub_type这三个字段做了联合约束,也就是说这三个不能有相同的另一条数据,所以在遇到相同的数据持久化的时候会报异常。
解决方法:
1.使用ignore关键字,避免重复插入记录可以使用:
insert ignore student_task_trace (student_id,task_plan_reads_options_id,sub_type)
VALUES (111111,51,0)
insert into student_task_trace (student_id,task_plan_reads_options_id,sub_type)
VALUES (111111,51,0)
第一条sql执行的时候如果已有相同数据会返回0;
第二条sql执行的时候如果已有相同数据会返回异常,如图:
2.使用Replace,如果旧记录与新记录有相同的值,则在新记录被插入之前,旧记录被删除,存入新纪录:
REPLACE INTO student_task_trace (student_id,task_plan_reads_options_id,sub_type)
VALUES (111111,51,0)
insert into student_task_trace (student_id,task_plan_reads_options_id,sub_type)
VALUES (111111,51,0)
第一条sql执行的时候如果已有相同数据会返回2,因为删除一条插入一条,主键id会变;
第二条sql执行的时候如果已有相同数据会返回异常;
还有其他的解决方案这里不做说明,如需要可自行谷歌-------“解决数据库唯一约束插入相同数据问题”。
---------------------
作者:zhuzhihongNO1
来源:CSDN
原文:https://blog.csdn.net/tomcat_zhu/article/details/82911158
版权声明:本文为博主原创文章,转载请附上博文链接!
执行SQL语句的时候唯一约束字段异常Duplicate entry '33382-1-0' for key xxx相关推荐
- java逐行读取文件内容执行sql语句_[11/100] 文件和异常
最近学习效率很低,居然还开始熬夜玩耍了.好好干啊,技术差就要多付出啊. 操作模式 选择操作模式 读写文本文件 1.读取 import timedef main():f = Nonetry:# 一次性读 ...
- 一起谈.NET技术,linq2sql:直接执行sql语句
1.ExecuteQuery方法 看命名,我们很容易联想到ado.net里熟悉的Command的ExecuteNonQuery方法,但是VS的智能提示告诉我们这个方法返回的是一个泛型集合,应该&quo ...
- phpmyadmin执行mysql语句_如何在phpMyAdmin中执行sql语句
大家使用phpMyAdmin中常遇到这样的问题:MySQL Error Message: MySQL Query Error SQL: SELECT main.*, field.* FROM ucho ...
- efcore调用函数_EFCore执行Sql语句的方法:FromSql与ExecuteSqlCommand
前言 在EFCore中执行Sql语句的方法为:FromSql与ExecuteSqlCommand:在EF6中的为SqlQuery与ExecuteSqlCommand,而FromSql和SqlQuery ...
- oracle中执行动态sql语句吗,oracle中有没有可动态执行sql语句的函数
oracle中有没有可动态执行sql语句的函数 关注:233 答案:2 手机版 解决时间 2021-03-05 15:53 提问者祗剩寂寞 2021-03-04 22:38 oracle中有没有可 ...
- Python 技术篇-连接oracle数据库并执行sql语句实例演示,python连接oracle数据库oci详细配置方法
Python 连接 Oracle 数据库 第一章:连接 oracle 数据与环境配置 ① 连接 oracle 数据库效果演示 ② oci 下载 ③ oci 配置 ④ 环境变量配置 ⑤ 检测是否有 or ...
- 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作
https://www.zybuluo.com/aitanjupt/note/209941 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作 〇.摘要 一.基础环境 二.数据存 ...
- Entity Framework Core 执行SQL语句和存储过程
无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...
- 使用sql语句创建和删除约束示例代码
使用sql语句创建和删除约束 约束类型 主键约束(Primary Key constraint) --:要求主键列数据唯一,并且不允许为空. 唯一约束(Unique constraint) --: ...
最新文章
- ORACLE授权用户查询另一个用户下的表与视图
- webpack vue-cli 一有空格和分号就报错
- 4-算法冒泡排序 插入排序
- STM32采集电阻触摸贴膜
- 2011-9-11 凌晨00:46
- JSOI2007 文本生成器
- python动态演示数据gdp_荐爬取世界各国历年的GDP数据
- 用js实现简单计算器
- 微信小程序授权登录源码
- 使用C#创建快捷方式
- TF flags的简介
- Android面试英文介绍
- VS Code PHP代码提示和格式化插件 IntelliSense安装使用
- 中考计算机易错知识点,【中考备考】易错知识点归类
- 杰理之EQ drc 限幅器、多带限幅器、压缩器、多带压缩器调节【篇】
- 【C++】C++数组初始化方法
- gdb命令行调试相关操作
- mongoDB Atlas
- matlab 与VS混合编程的几个问题
- UI设计规范技巧——文件整理
热门文章
- 零基础学习UI设计技能
- 如何使用ROS控制真实UR5机器人
- 【接口篇 / Wan】(7.0) ❀ 05. 将 4G 作为备用宽带使用 ❀ FortiGate 防火墙
- 如何在百度又快有准的搜索资源
- 如图一显示了用计算机模拟,(全套打包)北京市各区2017年中考模拟试题汇编·数学...
- Qt开发奇葩问题总集
- Tensorflow Win10 stage.2
- win10+ubuntu 18.04双系统(联想小新13pro)——我终于安好了!
- python培训 马哥 教室
- 计算机专业学生如何写一份优秀的校招简历(大三、研二学生请进)