MySQL INSERT语句实现当记录不存在时插入的几种方法

2025-03-30 15:50

本文主要是介绍MySQL INSERT语句实现当记录不存在时插入的几种方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时...

mysql 中,有几种方法可以实现"当记录不存在时插入"的操作。以下是几种常用的解决方案:

使用 IChina编程NSERT IGNORE

INSERT IGNORE INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);

特点:

1.如果记录已存在(基于主键或唯一索引),则忽略插入操作

2.不会报错,但会返回警告

3.简单易用,但无法知道是插入成功还是被忽略

使用 ON DUPLICATE KEY UPDATE

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)
ON DUPLICATE KEY UPDATE column1 = VALUES(column1), column2 = VALUES(column2);

特点:

1.如果记录已存在,则执行 UPDATE 操作

2.可以指定更新哪些字段

3.返回受影响的行数(1表示插入,2表示更新)

使用 REPLACE INTO

REPLACE INTO table_name (column1, column2, .python..)
VALUES (value1, value2, ...);

特点:

1.如js果记录已存在,先删除旧记录再插入新记录

2.会触发 DELETE 和 INSERT 两个操作

3.自增ID会改变(不推荐需要保持ID不变的场景)

使用 NOT EXISTS 子查询

INSERT INTO table_name (column1, column2, ...)
SELECT value1, value2, ...
FROM dual
WHERE NOT EXISTS (
    SELECT 1 FROM table_name 
    WHERE unique_column = unique_value
);

特点:

1.更灵活的判断条件

2.可以基于非唯一键判断

3.语法稍复杂

示例对比

假设有一个用户表 users,主键为 id,username 有唯一约束:

-- 方法1: INSERT IGNORE
INSERT IGNORE INTO users (username, email) VALUES ('john', 'john@example.com');

-- 方法2: ON DUPLICATE KEY UPDATE
INSERT INTO users (username, email) VALUES ('john', 'john@example.com')
ON DUPLICATE KEY UPDATE email = VALUES(email);

-- 方法3: REPLACE INTO
REPLACE INTO users (username, email) VALUES ('john', 'john@example.com');

-- 方法4: NOT EXISTS
INSERT INTO users (username, email)
SELECT 'john', 'john@example.javascriptcom'
FROM dual
WHERE NOT EXISTS (
    SELECT 1 FROM users WHERE username = 'john'
);

实践建议

  • 如果只是避免重复插入,使dxEBaH用 INSERT IGNORE
  • 如果需要更新已有记录,使用 ON DUPLICATE KEY UPDATE
  • 除非特殊需求,避免使用 REPLACE INTO(因为它会先删除记录)
  • 复杂条件判断时使用 NOT EXISTS 方法 注意:这些方法都依赖于表上的主键或唯一约束才能正常工作。

总结 

到此这篇关于MySQL INSERT语句实现当记录不存在时插入的几种方法的文章就介绍到这了,更多相关MySQL INSERT当记录不存在时插入内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于MySQL INSERT语句实现当记录不存在时插入的几种方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154011

相关文章

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法

《springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法》:本文主要介绍springboot整合阿里云百炼DeepSeek实现sse流式打印,本文给大家介绍的非常详细,对大... 目录1.开通阿里云百炼,获取到key2.新建SpringBoot项目3.工具类4.启动类5.测试类6.测

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

pytorch自动求梯度autograd的实现

《pytorch自动求梯度autograd的实现》autograd是一个自动微分引擎,它可以自动计算张量的梯度,本文主要介绍了pytorch自动求梯度autograd的实现,具有一定的参考价值,感兴趣... autograd是pytorch构建神经网络的核心。在 PyTorch 中,结合以下代码例子,当你

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化