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主从复制及读写分离
May 07 MySQL
Navicat for MySQL的使用教程详解
May 27 MySQL
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
Jul 01 MySQL
MySQL外键约束(FOREIGN KEY)案例讲解
Aug 23 MySQL
一次MySQL启动导致的事故实战记录
Sep 15 MySQL
MySQL中int (10) 和 int (11) 的区别
Jan 22 MySQL
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
Feb 12 MySQL
MySQL学习必备条件查询数据
Mar 25 MySQL
MySQL分区路径子分区再分区
Apr 13 MySQL
MySQ InnoDB和MyISAM存储引擎介绍
Apr 26 MySQL
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下把数组保存为文件格式的实例应用
2010/02/08 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
2014/11/29 PHP
制作安全性高的PHP网站的几个实用要点
2014/12/30 PHP
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
浅谈php中curl、fsockopen的应用
2016/12/10 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
yii2中dropDownList实现二级和三级联动写法
2017/04/26 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
php和nginx交互实例讲解
2019/09/24 PHP
多广告投放代码 推荐
2006/11/13 Javascript
Jquery插件 easyUI属性汇总
2011/01/19 Javascript
js如何实现设计模式中的模板方法
2013/07/23 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
js实现索引图片切换效果
2015/11/21 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
2016/06/10 Javascript
用jmSlip编写移动端顶部日历选择控件
2016/10/24 Javascript
js实现自定义进度条效果
2017/03/15 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
2017/10/06 Javascript
js原生日历的实例(推荐)
2017/10/31 Javascript
Angular4的输入属性与输出属性实例详解
2017/11/29 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
2019/12/22 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
以一个投票程序的实例来讲解Python的Django框架使用
2016/02/18 Python
Python输出各行命令详解
2018/02/01 Python
django2.0扩展用户字段示例
2019/02/13 Python
python使用pandas处理大数据节省内存技巧(推荐)
2019/05/05 Python
Django REST framework内置路由用法
2019/07/26 Python
HTML5实现视频直播功能思路详解
2017/11/16 HTML / CSS
2014年教育实习工作总结
2014/11/22 职场文书
大学学生会竞选稿
2015/11/19 职场文书
六五普法心得体会2016
2016/01/21 职场文书