mysql insert 存在即不插入语法说明


Posted in MySQL onMarch 25, 2022

insert 存在即不插入语法

介绍三种方式

第一种:replace into

replace into table(id, name) values(1, '张三') ;
/*或者*/
replace into table(id, name) select 1, '张三' ;

replace into 跟 insert 功能类似。

不同点在于:replace into 首先尝试插入数据到表中

1.如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。

2.否则,直接插入新数据。

要注意的是:插入数据的表必须有主键或者是唯一索引!

否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。

第二种:DUAL临时表

insert into table(id, name)
select null, '张三' from DUAL
where not exists (select id from table where name = '张三') ;

其中的 DUAL 是一个临时表,不需要物理创建,直接用即可。

这种就不需要上述那种必须主键相同或者有唯一索引的字段。

第三种:根据主键判断

insert into table(id, name) on duplicate key update name = '李四';

根据主键id进行判重。

效果区别

第一种:不存在即插入,存在即修改

第二种:不存在即插入,存在则不做处理

第三种:不存在不做处理,存在即执行update

已有数据存在则不插入,否则则修改

经常遇到这样的情景,向一个表里插入一条数据,如果已经存在就更新一下,用程序实现麻烦而且在并发的时候可能会有问题,这时用mysql的DUPLICATE KEY 很方便

用法

INSERT INTO agent_user (group_id,group_type,user_name, user_mobile,created_time,updated_time)
SELECT 9503,8,a.user_name,a.user_mobile,1642397508000,1642397508000
from agent_user_heimingdan a on DUPLICATE KEY UPDATE user_mobile = a.user_mobile;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

MySQL 相关文章推荐
MySql学习笔记之事务隔离级别详解
May 12 MySQL
mysql 带多个条件的查询方式
Jun 05 MySQL
MySQL 1130异常,无法远程登录解决方案详解
Aug 23 MySQL
MySQL中的隐藏列的具体查看
Sep 04 MySQL
mysql配置SSL证书登录的实现
Sep 04 MySQL
Mysql排序的特性详情
Nov 01 MySQL
一文带你探究MySQL中的NULL
Nov 11 MySQL
MySQL学习之基础命令实操总结
Mar 19 MySQL
Mysql调整优化之四种分区方式以及组合分区
Apr 13 MySQL
MySQL数据库之存储过程 procedure
Jun 16 MySQL
MySQL约束(创建表时的各种条件说明)
Jun 21 MySQL
MySQL使用IF语句及用case语句对条件并结果进行判断 
Sep 23 MySQL
MySQL创建表操作命令分享
mysql数据插入覆盖和时间戳的问题及解决
MySQL实战记录之如何快速定位慢SQL
Mar 23 #MySQL
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
Mar 23 #MySQL
简单聊一聊SQL注入及防止SQL注入
Mar 23 #MySQL
浅谈MySQL中的六种日志
Mar 23 #MySQL
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
You might like
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
PHP中array_merge和array相加的区别分析
2013/06/17 PHP
php导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
PHP递归调用数组值并用其执行指定函数的方法
2015/04/01 PHP
php中JSON的使用方法
2015/04/30 PHP
微信支付开发订单查询实例
2016/07/12 PHP
PHP实现json_decode不转义中文的方法
2017/05/20 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
javascript 节点遍历函数
2010/03/28 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
jQuery操作select下拉框的text值和value值的方法
2014/05/31 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
jquery实现图片上传之前预览的方法
2015/07/11 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
JS+canvas绘制的动态机械表动画效果
2017/09/12 Javascript
使用原生JS实现火锅点餐小程序(面向对象思想)
2019/12/10 Javascript
python分析apache访问日志脚本分享
2015/02/26 Python
Django内容增加富文本功能的实例
2017/10/17 Python
Python supervisor强大的进程管理工具的使用
2019/04/24 Python
Python实战之制作天气查询软件
2019/05/14 Python
Python字典对象实现原理详解
2019/07/01 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
2020/04/14 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
2020/12/08 Python
利用HTML5 Canvas制作一个简单的打飞机游戏
2015/05/11 HTML / CSS
HTML5中Localstorage的使用教程
2015/07/09 HTML / CSS
Radley英国官网:英国莱德利小狗包
2019/03/21 全球购物
Monki官网:斯堪的纳维亚的独立时尚品牌
2020/11/09 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
面试必备的求职信
2014/05/25 职场文书
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS