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 25 MySQL
详解MySQL中的pid与socket
Jun 15 MySQL
MySQL中int (10) 和 int (11) 的区别
Jan 22 MySQL
一文弄懂MySQL中redo log与binlog的区别
Feb 15 MySQL
Mysql数据库表中为什么有索引却没有提高查询速度
Feb 24 MySQL
MySQL七大JOIN的具体使用
Feb 28 MySQL
MySQL读取JSON转换的方式
Mar 18 MySQL
MySQL三种方式实现递归查询
Apr 18 MySQL
MySQL 数据库范式化设计理论
Apr 22 MySQL
MySQL数据库如何查看表占用空间大小
Jun 10 MySQL
mysql sql常用语句大全
Jun 21 MySQL
DQL数据查询语句使用示例
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 flush()与ob_flush()的区别详解
2013/06/03 PHP
PHP的文件操作与算法实现的面试题示例
2015/08/10 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
javascript 对象的定义方法
2007/01/10 Javascript
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
javascript 三种编解码方式
2010/02/01 Javascript
Jquery ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
2010/03/27 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
2013/06/05 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
微信小程序中post方法与get方法的封装
2017/09/26 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
VuePress 快速踩坑小结
2019/02/14 Javascript
关于vue组件事件属性穿透详解
2019/10/28 Javascript
selenium+java中用js来完成日期的修改
2019/10/31 Javascript
Python使用百度API上传文件到百度网盘代码分享
2014/11/08 Python
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
Python while 循环使用的简单实例
2016/06/08 Python
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
python Opencv将图片转为字符画
2021/02/19 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
使用IPython或Spyder将省略号表示的内容完整输出
2020/04/20 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
2020/12/05 Python
如何判断计算机可能已经中马
2013/03/22 面试题
《小小雨点》教学反思
2014/02/18 职场文书
学校献爱心活动总结
2014/07/08 职场文书
应用心理学专业求职信
2014/08/04 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
2015年纪委工作总结
2015/05/13 职场文书
2016年国庆节67周年活动总结
2016/04/01 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers