修改数据库数据出现:Duplicate entry for key ‘PRIMARY‘的原因(外加数据库语句报错合集)


标题对应的报错:
在这里插入图片描述
数据库查询的时候未发现还生成了其他多条记录,经过搜索后发现了其他多条数据!
意思是主键的值是不能出现两条重复的记录的,在修改的时候不能修改成已存在的数值。
在这里插入图片描述
关于主键和多个主键(联合主键)的区别:
主键的唯一性和联合主键概念辨析

Mysql报错

> 1. ambiguous column name

解决方法:
  在多张表里都有的字段名称,在选择语句中要标明是哪张表里的字段。

Mysql基础合集

  • 1.UTF8:一个汉字=3个字节
      GBK:一个汉字=2个字节

Oracle报错

Oracle 基础合集

1.to_number和to_char恰好是两个相反的函数;

SQL Server报错

> 1. 不能将显式值插入时间戳列。请对列列表使用 INSERT 来排除时间戳列,或将 DEFAULT 插入时间戳列。 (2021.12.30)

解决方法:
        SQL Server中的timestamp类型,不能插入显式值,将插入语句中对应字段插入删去即可。

> 2. 将截断字符串或二进制数据

解决方法:
        主要原因就是你增加的数据字段长度超过数据库中字段所定义长度,去查看一下自己数据库中的字段的长度,一般是误写出来的,查看一下自己数据库中需要自己设置字段类型长度的。

> 3.Mybatisplus savebatch出现 Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 必须执行该语句才能获得结果。

解决方法:
    将实体类中的主键自增id的TableId注释掉

> 4.SQL SERVER实现limit,与mysql不同

>>>查询前5条
select TOP 5 *from browserecord where username = '1';
查第4到第7
SELECT TOP 4 * FROM browserecord 
WHERE browserecord.recordid
NOT IN
(SELECT TOP 3 recordid FROM browserecord)

>>>!!!另外一种分页查询的方式
select id from student
order by id ASC OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY !!!这种方式一定要加order by 不然会报错 

> 5.Mybatis LocalDateTime类型的对象无法跟数据库的datetime类型比较

解决方法:

						#{ 里面带上jdbcType = DATE}
			<if test="startInpTime != null"><!-- 稽查时间-->
                and inpcase.inp_time <![CDATA[ >= ]]> #{startInpTime,jdbcType=DATE}
            </if>
            <if test="endInpTime != null"><!-- 稽查时间-->
                and inpcase.inp_time <![CDATA[ <= ]]> #{endInpTime,jdbcType=DATE}
            </if>

SQL Server 基础合集

1.一个中文占两个字符
2.字段为nvarchar时,在写 LIKE 或者 = 时,需要写 LKIE N’%模糊查询%’ 前面需要加个N,才能转换为nchar类型

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值