码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • SQL语句如何避免在mysql插入重复数据


    目录

    准备

    insert ignore into

    on duplicate key update

    replace into

    insert if not exists


    如何避免在mysql插入重复数据?

    最常见的做法,就是唯一索引或主键,不过,有时候不能只用唯一索引或者主键,毕竟真的重复了,会报错,如果处理不当,会有问题,因此,有一些特殊的语句就可以拿来用

    准备

    先进行表的准备工作,

    1. CREATE TABLE `usermessage` (
    2. `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
    3. `password` varchar(255) DEFAULT NULL,
    4. `id` int NOT NULL AUTO_INCREMENT,
    5. PRIMARY KEY (`id`) USING BTREE,
    6. UNIQUE KEY `index_username` (`username`) USING BTREE
    7. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

    insert ignore into

    在插入数据时,如果数据存在,就忽略

    前提条件要求插入的字段设置了主键或者唯一索引,插入数据时,DB会首先查找已有数据,如果存在,本次就不插入,不存在,就正常插入

    我们先插入一条

    INSERT INTO usermessage(`name`, `word`) VALUES ('ad', 'ad123');
    

    然后我们试试再次插入此记录

    看,影响行数0,我们再试试别的记录

    on duplicate key update

    插入数据时,如果存在,那就更新

    前提也是要有主键或者唯一索引,插入数据时,DB会首先查找已有数据,如果存在,本次就更新,不存在,就正常插入

    INSERT INTO usermessage(`name`, `word`) VALUES ('sysadmin', 'update_password') on duplicate key update word ='update_password';

    这是表里的数据,我们执行以下SQL,再看结果

    replace into

    插入数据时,如果数据存在,那就删除再插入

    前提也是要有主键或者唯一索引,如果存在,那就先删除,不存在,就直接插入

    这是替换前的数据,我们执行以下SQL

    replace into usermessage(name, word) values ('root', 'root_replace');

    注意,id也变了,id我们设置的是自增的,所以是删除再插入的,不是修改

    insert if not exists

    如果不存在就插入

    前面三种都有主键或者唯一索引的限制,这一种没有

    insert into usermessage(`name`, word) select 'user1', 'reset' from DUAL where not exists (select `name` from usermessage where `name` = 'user1');

     具体使用那种,可以看情况

  • 相关阅读:
    lintcode 1642 · 查询字符串【二进制 字符串 中等 vip】
    单元测试Mockito笔记
    “手印”惠及你我,共赴绿色降碳之路
    AtCoder abc130
    PHP房屋租售信息管理系统可以用wamp、phpstudy运行定制开发mysql数据库BS模式
    Anemoi hash:一种SNARK-friendly的哈希函数
    GRPC C++开发环境搭建
    Nginx日志功能介绍
    ERROR 1366 (HY000): Incorrect string value,mysql插入数据报错?安排
    Spring Boot+Vue3前后端分离实战wiki知识库系统之后端架构完善与接口开发
  • 原文地址:https://blog.csdn.net/weixin_46097842/article/details/126638259
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号