前言:做项目的时候,执行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相关推荐

  1. java逐行读取文件内容执行sql语句_[11/100] 文件和异常

    最近学习效率很低,居然还开始熬夜玩耍了.好好干啊,技术差就要多付出啊. 操作模式 选择操作模式 读写文本文件 1.读取 import timedef main():f = Nonetry:# 一次性读 ...

  2. 一起谈.NET技术,linq2sql:直接执行sql语句

    1.ExecuteQuery方法 看命名,我们很容易联想到ado.net里熟悉的Command的ExecuteNonQuery方法,但是VS的智能提示告诉我们这个方法返回的是一个泛型集合,应该&quo ...

  3. phpmyadmin执行mysql语句_如何在phpMyAdmin中执行sql语句

    大家使用phpMyAdmin中常遇到这样的问题:MySQL Error Message: MySQL Query Error SQL: SELECT main.*, field.* FROM ucho ...

  4. efcore调用函数_EFCore执行Sql语句的方法:FromSql与ExecuteSqlCommand

    前言 在EFCore中执行Sql语句的方法为:FromSql与ExecuteSqlCommand:在EF6中的为SqlQuery与ExecuteSqlCommand,而FromSql和SqlQuery ...

  5. oracle中执行动态sql语句吗,oracle中有没有可动态执行sql语句的函数

    oracle中有没有可动态执行sql语句的函数 关注:233  答案:2  手机版 解决时间 2021-03-05 15:53 提问者祗剩寂寞 2021-03-04 22:38 oracle中有没有可 ...

  6. Python 技术篇-连接oracle数据库并执行sql语句实例演示,python连接oracle数据库oci详细配置方法

    Python 连接 Oracle 数据库 第一章:连接 oracle 数据与环境配置 ① 连接 oracle 数据库效果演示 ② oci 下载 ③ oci 配置 ④ 环境变量配置 ⑤ 检测是否有 or ...

  7. 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作

    https://www.zybuluo.com/aitanjupt/note/209941 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作 〇.摘要 一.基础环境 二.数据存 ...

  8. Entity Framework Core 执行SQL语句和存储过程

    无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...

  9. 使用sql语句创建和删除约束示例代码

    使用sql语句创建和删除约束  约束类型 主键约束(Primary Key constraint) --:要求主键列数据唯一,并且不允许为空.  唯一约束(Unique constraint) --: ...

最新文章

  1. ORACLE授权用户查询另一个用户下的表与视图
  2. webpack vue-cli 一有空格和分号就报错
  3. 4-算法冒泡排序 插入排序
  4. STM32采集电阻触摸贴膜
  5. 2011-9-11 凌晨00:46
  6. JSOI2007 文本生成器
  7. python动态演示数据gdp_荐爬取世界各国历年的GDP数据
  8. 用js实现简单计算器
  9. 微信小程序授权登录源码
  10. 使用C#创建快捷方式
  11. TF flags的简介
  12. Android面试英文介绍
  13. VS Code PHP代码提示和格式化插件 IntelliSense安装使用
  14. 中考计算机易错知识点,【中考备考】易错知识点归类
  15. 杰理之EQ drc 限幅器、多带限幅器、压缩器、多带压缩器调节【篇】
  16. 【C++】C++数组初始化方法
  17. gdb命令行调试相关操作
  18. mongoDB Atlas
  19. matlab 与VS混合编程的几个问题
  20. UI设计规范技巧——文件整理

热门文章

  1. 零基础学习UI设计技能
  2. 如何使用ROS控制真实UR5机器人
  3. 【接口篇 / Wan】(7.0) ❀ 05. 将 4G 作为备用宽带使用 ❀ FortiGate 防火墙
  4. 如何在百度又快有准的搜索资源
  5. 如图一显示了用计算机模拟,(全套打包)北京市各区2017年中考模拟试题汇编·数学...
  6. Qt开发奇葩问题总集
  7. Tensorflow Win10 stage.2
  8. win10+ubuntu 18.04双系统(联想小新13pro)——我终于安好了!
  9. python培训 马哥 教室
  10. 计算机专业学生如何写一份优秀的校招简历(大三、研二学生请进)