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字段要使用NOT NULL
May 13 MySQL
MySQL官方导出工具mysqlpump的使用
May 21 MySQL
详细谈谈MYSQL中的COLLATE是什么
Jun 11 MySQL
MySQL query_cache_type 参数与使用详解
Jul 01 MySQL
MySQL系列之十 MySQL事务隔离实现并发控制
Jul 02 MySQL
mysql中int(3)和int(10)的数值范围是否相同
Oct 16 MySQL
mysql下的max_allowed_packet参数设置详解
Feb 12 MySQL
MySQL中B树索引和B+树索引的区别详解
Mar 03 MySQL
MySQ InnoDB和MyISAM存储引擎介绍
Apr 26 MySQL
详解Mysql事务并发(脏读、不可重复读、幻读)
Apr 29 MySQL
MySQL详细讲解变量variables的用法
Jun 21 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利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
Paypal实现循环扣款(订阅)功能
2017/03/23 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
页面版文本框智能提示JS代码
2009/11/20 Javascript
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
javascript面向对象编程代码
2011/12/19 Javascript
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
javascript实现超炫的向上滑行菜单实例
2015/08/03 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
js实现随机抽选效果、随机抽选红色球效果
2017/01/13 Javascript
AngularJS中的路由使用及实现代码
2017/10/09 Javascript
mui框架 页面无法滚动的解决方法(推荐)
2018/01/25 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
2019/01/06 Javascript
关于vue状态过渡transition不起作用的原因解决
2019/04/09 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
vscode 调试 node.js的方法步骤
2020/09/15 Javascript
python安装以及IDE的配置教程
2015/04/29 Python
python中lambda()的用法
2017/11/16 Python
基于pandas将类别属性转化为数值属性的方法
2018/07/25 Python
django ModelForm修改显示缩略图 imagefield类型的实例
2019/07/28 Python
基于opencv实现简单画板功能
2020/08/02 Python
canvas线条的属性详解
2018/03/27 HTML / CSS
美国领先的商务贺卡出版商:The Gallery Collection
2018/02/13 全球购物
计算机专业学生的自我评价
2013/12/15 职场文书
公司管理建议书范文
2014/03/12 职场文书
《数星星的孩子》教学反思
2014/04/11 职场文书
作文评语大全
2014/04/23 职场文书
暑假社会实践心得体会
2014/09/02 职场文书
酒店财务部岗位职责
2015/04/14 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript
python 爬取华为应用市场评论
2021/05/29 Python
MySQL限制查询和数据排序介绍
2022/03/25 MySQL