这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...
org
.
springframework
.
dao
.
Dupli
cat
e
Key
Exception
: ### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolation
Exception
:
Dupli
cat
e entry '10' for
key
'PRIMARY' ### The error may exist in com/rhpass/cloud/order/mapper/Invoic...
进行数据写入的时候,当线上调用接口,同时写入大量数据(会有
重复
数据写入),报以下错误:
org
.
springframework
.
dao
.
Dupli
cat
e
Key
Exception
:
### Error updating database. Cause: com.
mysql
.jdbc.
exception
s.jdbc4.
MySQL
IntegrityConstraintViolationExcept...
该文为《
MySQL
实战 45 讲》的学习笔记,感谢查看,如有错误,欢迎指正
一、查询和更新上的区别
这两类索引在查询能力上是没差别的,主要考虑的是对更新性能的影响。建议尽量选择普通索引。
1.1
MySQL
的查询操作
查找到第一个满足条件的记录后,继续向后遍历,直到第一个不满足条件的记录。
由于索引定义了唯一性,查找到第一个满足条件的记录后,直接停止继续检索。
普通索引会多检索一次,几乎没有影响。因为 InnoDB 的数据是按照数据页为单位进行读写的,需要读取数据时,并不...
作者:胡呈清
爱可生 DBA 团队成员,擅长故障分析、性能优化,个人博客:https://www.jianshu.com/u/a95ec11f67a8,欢迎讨论。
本文来源:原创投稿
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
最近遇到一个故障:单主模式5节点 MGR 集群,在使用
mysql
shell 导入数据时,所有secondary节点报错唯一键冲突退出集群。最终得到的结论是:
mysql
shell importTable() 导入数据时会做 SET uniqu.
今天在测试过程中发现有数据
重复
的现象,想设计一个
唯一索引
达到幂等的效果,但是发现设置了
唯一索引
以后还是可以插入相同的数据,经过排查,发现联合
唯一索引
中含有null值会导致索引失效。
二.问题复现
现在我们来复现一下这个场景。
2.1 首先创建一个 user 表,指定 user_name + address 为联合
唯一索引
CREATE TABLE `t_user` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
我们的需求一般是(软)删除后可以重新添加,那么问题就来了
数据库不知道我是不是软删除,这个字段其他数据也有,那么数据库就会判断插入(编辑)失败(注意:此处是直接抛出
异常
,可以用try
cat
ch去捕捉
异常
,需要提醒的是mybatis中insert或update语句返回的虽然是int或者是boolean,但是他的内部仍然没有给处理,所以如果使用mybatis的话同样需要手动处理
异常
)
1.采用force index 强行选择一个索引。
2.修改sql语句、引导
MySQL
使用我们期望的索引。
3.在有些场景下,我们可以新建一个更适合的索引,来提供给优化器做选择,或删除掉误用的索引。
由于索引统计信息的不准确,可以用analyze table来解决。
而对于其它优化器误判断的情况,你可以在应用端用force index 来强行指定索引,也可以通过修改语句来引导优化器,还可以通过增加或者删除索引来绕过这个问题。
公司业务,表设置了唯一值,一般业务代码里先查一遍数据库,存在的话就直接返回货修改,不存在才插入,测试没什么问题,但是上到线上高并发下疯狂报
Dupli
cat
e
Key
Exception
…查阅两个多小时才发现
MySQL
还有ON
DUPLI
CAT
E
KEY
UPDATE这样的用法
比如,有一张表,专门记录业务里的唯一数据记录,这张表里如果存在此唯一数据的记录就更新此行数据的某个字段,如果此唯一数据不存在,那么就添加一条最新数据。
一贯操作:如果不知道
mysql
有 ON
DUPLI
CAT
E
KEY
UPDAT