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 自定义变量的概念及特点
May 13 MySQL
MySQL中distinct与group by之间的性能进行比较
May 26 MySQL
Mysql数据库索引面试题(程序员基础技能)
May 31 MySQL
通过shell脚本对mysql的增删改查及my.cnf的配置
Jul 07 MySQL
MySQL深度分页(千万级数据量如何快速分页)
Jul 25 MySQL
Linux7.6二进制安装Mysql8.0.27详细操作步骤
Nov 27 MySQL
MySQL慢查询优化解决问题
Mar 17 MySQL
mysql 生成连续日期及变量赋值
Mar 20 MySQL
MySql分区类型及创建分区的方法
Apr 13 MySQL
SQL语句中EXISTS的详细用法大全
Jun 25 MySQL
MySQL count(*)统计总数问题汇总
Sep 23 MySQL
MySQL深分页问题解决思路
Dec 24 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 Ajax中文乱码问题解决方法
2009/02/27 PHP
浅析Mysql 数据回滚错误的解决方法
2013/08/05 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
2014/09/10 PHP
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
2008/11/06 Javascript
js 获取Listbox选择的值的代码
2010/04/15 Javascript
jquery focus(fn),blur(fn)方法实例代码
2011/12/16 Javascript
如何使用Javascript正则表达式来格式化XML内容
2013/07/04 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
javascript函数式编程实例分析
2015/04/25 Javascript
JS仿JQuery选择器功能
2017/03/08 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
ReactNative短信验证码倒计时控件的实现代码
2017/07/20 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
JS简单实现滑动加载数据的方法示例
2017/10/18 Javascript
12条写出高质量JS代码的方法
2018/01/07 Javascript
解决bootstrap模态框数据缓存的问题方法
2018/08/10 Javascript
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
vue解决花括号数据绑定不成功的问题
2019/10/30 Javascript
vue实现拖拽效果
2019/12/23 Javascript
python重试装饰器示例
2014/02/11 Python
Python之PyUnit单元测试实例
2014/10/11 Python
python二分查找算法的递归实现方法
2016/05/12 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
Python bytes string相互转换过程解析
2020/03/05 Python
Django调用百度AI接口实现人脸注册登录代码实例
2020/04/23 Python
浅谈django 重载str 方法
2020/05/19 Python
python如何停止递归
2020/09/09 Python
瑞典度假品牌:OAS
2019/05/28 全球购物
乌克兰最大的家用电器和电子产品连锁店:Eldorado
2019/10/02 全球购物
2014年高三毕业生自我评价
2014/01/11 职场文书
2014年财务部工作总结
2014/11/11 职场文书
2015年惩防体系建设工作总结
2015/05/22 职场文书
单位政审意见范文
2015/06/04 职场文书
外出听课学习心得体会
2016/01/15 职场文书
JS中如何优雅的使用async await详解
2021/10/05 Javascript