zoukankan      html  css  js  c++  java
  • 【转】insert忽略重复、mysql插入操作跳过、插入覆盖覆盖、mysql更新重复

    需求背景:
    一般情况,插入数据的时候,有脏数据的情况,主键重复的话,直接insert into 会报错的,然后下面的sql都不再执行了,如果可以确定后面的数据可以覆盖前面的数据,直接用replace into 就行了。一般情况我用这个比较多,其余情况请看下面文章。

    1.insert ignore into

    当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回。所以使用ignore请确保语句本身没有问题,否则也会被忽略掉。例如:

    INSERT IGNORE INTO books (name) VALUES ('MySQL Manual')
    INSERT IGNORE INTO books (name) VALUES ('MySQL Manual'),('NGINX Manual'),('REDIS Manual')

    2.on duplicate key update
    当primary或者unique重复时,则执行update语句,如update后为无用语句,如id=id,则同1功能相同,但错误不会被忽略掉。例如,为了实现name重复的数据插入不报错:

    INSERT INTO books (name) VALUES ('MySQL Manual') ON duplicate KEY UPDATE id = id

    3.insert … select … where not exist
    根据select的条件判断是否插入,可以不光通过primary 和unique来判断,也可通过其它条件。例如:

    INSERT INTO books (name) SELECT 'MySQL Manual' FROM dual WHERE NOT EXISTS (SELECT id FROM books WHERE id = 1)

    4.replace into
    如果存在primary or unique相同的记录,则先删除掉。再插入新记录。注意若原记录存在(a1,b1,c1),新记录为(a1,b2),则replace后c字段为null

    REPLACE INTO books SELECT 1, 'MySQL Manual' FROM books

    原文地址:https://www.cnblogs.com/sweet521/p/5730804.html

      扫二维码,关注更多PHP资讯!

    qrcode_for_gh_eca2f6d7a005_258.jpg

  • 相关阅读:
    uniapp--悬浮可拖动按钮-实现思路
    js获取指定日期的前一天/后一天
    适配
    使用了@Slf4j log没有info的方法 .info()方法爆红或者log爆红
    用hexo在本地搭建自己的博客
    gulp 前端构建工具使用
    springboot+idea 热部署
    配置DNS服务器转发器
    windows server2008 r2安装DNS服务器
    卸载jdk1.7
  • 原文地址:https://www.cnblogs.com/zhangzhijian/p/10938960.html
Copyright © 2011-2022 走看看