四时宝库

程序员的知识宝库

MySQL中的insert ignore into使用记录

MySQL中的insert ignore into

最近工作中,使用到了insert ignore into语法,感觉这个语法还是挺有用的,这里做个记录。

insert ignore into : 忽略重复的记录,直接插入数据。

1、插入的数据是主键冲突时,insert ignore into会给出“warnings”,并且本次插入无效

2、没有主键冲突时,直接插入数据

对于一些简单的避免主键重复插入,不需要返回错误的需求还是非常好用的。


当前表结构:


在mybatis中的使用:

<insert id="insertIgnoreStudyUserComplete">
    insert IGNORE into gnfl_study_user_complete(user_id,study_id,create_time) values(#{userId},#{studyId},SYSDATE())
</insert>


最后提一点注意点(坑):避免自增id和复杂的组合unique key

insert ignore的时候会对插入的每一行数据取S锁做unique id的检测,同时会对主键的自增id字段加写意向锁(insert intension),在unique key较为复杂的时候,检测unique key的时候会一直占用主键的插入意向锁,其他insert ignore也想给主键id加插入意向锁,导致死锁。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接