MySQL中几种插入和批量语句实例详解


Posted in MySQL onSeptember 14, 2021

前言

最常见的方式就是为字段设置主键或唯一索引,当插入重复数据时,抛出错误,程序终止,但这会给后续处理带来麻烦,因此需要对插入语句做特殊处理,尽量避开或忽略异常,下面我简单介绍一下,感兴趣的朋友可以尝试一下:

这里为了方便演示,我新建了一个user测试表,主要有id,username,sex,address这4个字段,其中主键为id(自增),同时对username字段设置了唯一索引(idx_username)

1.insert ignore into

即插入数据时,如果数据存在,则忽略此次插入,前提条件是插入的数据字段设置了主键或唯一索引,测试SQL语句如下,当插入本条数据时,MySQL数据库会首先检索已有数据(也就是idx_username索引),如果存在,则忽略本次插入,如果不存在,则正常插入数据:

INSERT IGNORE INTO user (username,sex,address) VALUES ('hanpang','boy','HongKong')

2.on duplicate key update

即插入数据时,如果数据存在,则执行更新操作,前提条件同上,也是插入的数据字段设置了主键或唯一索引,测试SQL语句如下,当插入本条记录时,MySQL数据库会首先检索已有数据(idx_username索引),如果存在,则执行update更新操作,如果不存在,则直接插入:

INSERT IGNORE INTO user (username,sex,address) VALUES ('hanpang','boy','HongKong')
on duplicate key update
SEX='boy',address='HongKong'

3.replace into

即插入数据时,如果数据存在,则删除再插入,前提条件同上,插入的数据字段需要设置主键或唯一索引,测试SQL语句如下,当插入本条记录时,MySQL数据库会首先检索已有数据(idx_username索引),如果存在,则先删除旧数据,然后再插入,如果不存在,则直接插入:

REPLACE INTO user (username,sex,address) VALUES ('hanpang','boy','HongKong')

4.insert if not exists

即 insert into … select … where not exist ... ,这种方式适合于插入的数据字段没有设置主键或唯一索引,当插入一条数据时,首先判断MySQL数据库中是否存在这条数据,如果不存在,则正常插入,如果存在,则忽略:

INSERT  INTO user (username,sex,address) 
SELECT 'hanpang','boy','HongKong' FROM user
WHERE NOT EXISTS (SELECT username FROM user WHERE username='hanpang')

5.批量插入数据

上述的插入语句,是可以使用批量插入语句,表数据结构:

CREATE TABLE example (
    example_id INT NOT NULL,
    name VARCHAR( 50 ) NOT NULL,
    value VARCHAR( 50 ) NOT NULL,
    other_value VARCHAR( 50 ) NOT NULL
)

个人习惯使用这种批量操作方式,进行SQL语句拼接,但是当你的字符串太长(百万数据)的时候,需要你对mysql设置指令:

INSERT INTO example
VALUES
(100, 'Name 1', 'Value 1', 'Other 1'),
(101, 'Name 2', 'Value 2', 'Other 2'),
(102, 'Name 3', 'Value 3', 'Other 3'),
(103, 'Name 4', 'Value 4', 'Other 4');

实际开发中,我们更加喜欢使用通过程序代码进行批量添加操作(使用事务提交,批量插入数据库),使用上述的方式在插入测试数据或者其他低要求时比较合适,速度确实快。

6.批量更新

(1)replace into 批量更新(记得要有主键或者索引)

INSERT INTO example
VALUES
(100, 'Name 1', 'Value 1', 'Other 1'),
(101, 'Name 2', 'Value 2', 'Other 2'),
(102, 'Name 3', 'Value 3', 'Other 3'),
(103, 'Name 4', 'Value 4', 'Other 4');

(2)insert into ...on duplicate key update批量更新

使用INSERT的时候 有表T(id,A,B,C,D)

插入的时候希望通过A,B索引唯一记录 ,有重复的时候更新C,D

INSERT INTO T(A,B,C,D) VALUES (a,b,c,d) ON DUPLICATE KEY UPDATE C=C+1,D=d

(3)使用mysql 自带的语句构建批量更新

UPDATE yoiurtable
	SET dingdan = CASE id 
		WHEN 1 THEN 3 
		WHEN 2 THEN 4
		WHEN 3 THEN 5 
		END
WHERE id IN (1,2,3)

(4)创建临时表,先更新临时表,然后从临时表中update

create temporary table tmp(id int(4) primary key,dr varchar(50));
insert into tmp values  (0,'gone'), (1,'xx'),...(m,'yy');
update test_tbl, tmp set test_tbl.dr=tmp.dr where test_tbl.id=tmp.id;

总结

到此这篇关于MySQL中几种插入和批量语句的文章就介绍到这了,更多相关MySQL插入和批量语句内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL索引篇之千万级数据实战测试
Apr 05 MySQL
Mysql 性能监控及调优
Apr 06 MySQL
MySQL 视图(View)原理解析
May 19 MySQL
MySQL 全文索引使用指南
May 25 MySQL
MYSQL主从数据库同步备份配置的方法
May 26 MySQL
浅谈MySQL之浅入深出页原理
Jun 23 MySQL
mysql中整数数据类型tinyint详解
Dec 06 MySQL
为什么MySQL8新特性会修改自增主键属性
Apr 18 MySQL
MySQL数据库 安全管理
May 06 MySQL
MySQL表字段数量限制及行大小限制详情
Jul 23 MySQL
SQLServer常见数学函数梳理总结
Aug 05 MySQL
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
Aug 14 MySQL
MySQL 如何限制一张表的记录数
Sep 14 #MySQL
MySQL into_Mysql中replace与replace into用法案例详解
Sep 14 #MySQL
MYSQL 的10大经典优化案例场景实战
Sep 14 #MySQL
MySQL中连接查询和子查询的问题
mysql配置SSL证书登录的实现
MySQL约束超详解
Sep 04 #MySQL
MySQL中的隐藏列的具体查看
Sep 04 #MySQL
You might like
php下将图片以二进制存入mysql数据库中并显示的实现代码
2010/05/27 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
PHP 计算两个特别大的整数实例代码
2018/05/07 PHP
JavaScript让IE浏览器event对象符合W3C DOM标准
2009/11/24 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
2013/01/23 Javascript
简单实用的反馈表单无刷新提交带验证
2013/11/15 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
javascript中call apply 的应用场景
2015/04/16 Javascript
如何使用Vuex+Vue.js构建单页应用
2016/10/27 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
Angularjs实现搜索关键字高亮显示效果
2017/01/17 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
分析JavaScript数组操作难点
2017/12/18 Javascript
JS设计模式之策略模式概念与用法分析
2018/02/05 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
Node爬取大批量文件的方法示例
2019/06/28 Javascript
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
2019/09/27 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
[00:32]2018DOTA2亚洲邀请赛OpTic出场
2018/04/03 DOTA
python的文件操作方法汇总
2017/11/10 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
python自动发微信监控报警
2019/09/06 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
Python上下文管理器全实例详解
2019/11/12 Python
Python守护进程实现过程详解
2020/02/10 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
教育系毕业生中文求职信范文
2013/10/06 职场文书
新闻专业本科生的自我评价分享
2013/11/20 职场文书
擅自离岗检讨书
2014/09/12 职场文书
农业项目投资意向书
2015/05/09 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记
SpringBoot整合Minio文件存储
2022/04/03 Java/Android
redis protocol通信协议及使用详解
2022/07/15 Redis
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技