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 22 MySQL
jdbc使用PreparedStatement批量插入数据的方法
Apr 27 MySQL
MySQL表字段时间设置默认值
May 13 MySQL
浅谈MySQL next-key lock 加锁范围
Jun 07 MySQL
MySQL 亿级数据导入导出及迁移笔记
Jun 18 MySQL
mysql 直接拷贝data 目录下文件还原数据的实现
Jul 25 MySQL
浅谈MySQL之select优化方案
Aug 07 MySQL
一篇文章看懂MySQL主从复制与读写分离
Nov 07 MySQL
Mysql存储过程、触发器、事件调度器使用入门指南
Jan 22 MySQL
MySQL 主从复制数据不一致的解决方法
Mar 18 MySQL
MySQL数据库 任意ip连接方法
May 20 MySQL
MySQL选择合适的备份策略和备份工具
Jun 01 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 URL参数获取方式的四种例子
2014/02/28 PHP
CakePHP框架Model函数定义方法示例
2017/08/04 PHP
ie8模式下click无反应点击option无反应的解决方法
2014/10/11 Javascript
JS实现同时搜索百度和必应的方法
2015/01/27 Javascript
js实现类似jquery里animate动画效果的方法
2015/04/10 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
javascript多物体运动实现方法分析
2016/01/08 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
Angular2表单自定义验证器的实现
2016/10/19 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
js实现横向拖拽导航条功能
2017/02/17 Javascript
关于javascript获取内联样式与嵌入式样式的实例
2017/06/01 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
2017/06/22 Javascript
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
2018/09/03 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
2018/09/25 Javascript
Node.js 进程平滑离场剖析小结
2019/01/24 Javascript
详解javascript对数组和json数组的操作
2019/04/15 Javascript
解决Vue调用springboot接口403跨域问题
2019/09/02 Javascript
JS面向对象之多选框实现
2020/01/17 Javascript
js实现时钟定时器
2020/03/26 Javascript
pyv8学习python和javascript变量进行交互
2013/12/04 Python
python执行get提交的方法
2015/04/29 Python
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
pandas 获取季度,月度,年度首尾日期的方法
2018/04/11 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
基于Python fminunc 的替代方法
2020/02/29 Python
python中列表的含义及用法
2020/05/26 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
蔻驰英国官网:COACH英国
2020/07/19 全球购物
测控技术与仪器个人求职信范文
2013/12/30 职场文书
理财投资建议书
2014/03/12 职场文书
教师评语大全
2014/04/28 职场文书
企业承诺书怎么写
2014/05/24 职场文书
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
iPhone13将有八大升级
2021/04/15 数码科技