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 InnoDB ReplicaSet(副本集)简单介绍
Apr 24 MySQL
MySQL中VARCHAR与CHAR格式数据的区别
May 26 MySQL
如何设计高效合理的MySQL查询语句
May 26 MySQL
为什么MySQL选择Repeatable Read作为默认隔离级别
Jul 26 MySQL
MySQL常见优化方案汇总
Jan 18 MySQL
MySQL限制查询和数据排序介绍
Mar 25 MySQL
MySQL数据库配置信息查看与修改方法详解
Jun 25 MySQL
MySQL提升大量数据查询效率的优化神器
Jul 07 MySQL
面试官问我Mysql的存储引擎了解多少
Aug 05 MySQL
Mysql中mvcc各场景理解应用
Aug 05 MySQL
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
May 08 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中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
2011/08/23 PHP
PHP的博客ping服务代码
2012/02/04 PHP
php代码书写习惯优化小结
2013/06/20 PHP
PHP常用函数和常见疑难问题解答
2014/03/05 PHP
国产PHP开发框架myqee新手快速入门教程
2014/07/14 PHP
PHP高级编程实例:编写守护进程
2014/09/02 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
2016/03/23 PHP
php 实现301重定向跳转实例代码
2016/07/18 PHP
详解PHP的抽象类和抽象方法以及接口总结
2019/03/15 PHP
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
微信小程序 设置启动页面的两种方法
2017/03/09 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
javascript中的隐式调用
2018/02/10 Javascript
angularjs select 赋值 ng-options配置方法
2018/02/28 Javascript
Vue 无限滚动加载指令实现方法
2019/05/28 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
Python Datetime模块和Calendar模块用法实例分析
2019/04/15 Python
tensorflow实现对张量数据的切片操作方式
2020/01/19 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
2020/02/26 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
HTML5标签使用方法详解
2015/11/27 HTML / CSS
联想西班牙官网:Lenovo西班牙
2018/08/28 全球购物
Java的for语句中break, continue和return的区别
2013/12/19 面试题
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
大学生的四年学习自我评价
2013/12/13 职场文书
销售部主管岗位职责
2013/12/18 职场文书
商场活动策划方案
2014/01/24 职场文书
施工安全责任书
2014/04/14 职场文书
个人自荐材料
2014/05/23 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
代理人委托书
2014/09/16 职场文书
庆祝教师节标语
2014/10/09 职场文书
教师党员群众路线教育实践活动心得体会
2014/11/04 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
Python借助with语句实现代码段只执行有限次
2022/03/23 Python