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
MySQL8.0.24版本Release Note的一些改进点
Apr 22 MySQL
MySQL获取所有分类的前N条记录
May 07 MySQL
MySQL系列之开篇 MySQL关系型数据库基础概念
Jul 02 MySQL
MySQL系列之七 MySQL存储引擎
Jul 02 MySQL
MYSQL 运算符总结
Nov 11 MySQL
MySQL图形化管理工具Navicat安装步骤
Dec 04 MySQL
mysql数据插入覆盖和时间戳的问题及解决
Mar 25 MySQL
mysql查询结果实现多列拼接查询
Apr 03 MySQL
MySQL三种方式实现递归查询
Apr 18 MySQL
在MySQL中你成功的避开了所有索引
Apr 20 MySQL
MySQL 自动填充 create_time 和 update_time
May 20 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/03/04 PHP
PHP过滤★等特殊符号的正则
2014/01/27 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
2016/03/17 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
实例介绍PHP删除数组中的重复元素
2019/03/03 PHP
PHP文件操作简单介绍及函数汇总
2020/12/11 PHP
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
验证码在IE中不刷新而谷歌等浏览器正常的解决方案
2014/03/18 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
2014/09/21 Javascript
jquery实现先淡出再折叠收起的动画效果
2015/08/07 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
2016/01/05 Javascript
Node.js+Express配置入门教程
2016/05/19 Javascript
异步加载JS、CSS代码(推荐)
2016/06/15 Javascript
js插件实现图片滑动验证码
2020/09/29 Javascript
使用nvm管理不同版本的node与npm的方法
2017/10/31 Javascript
Three.js基础学习教程
2017/11/16 Javascript
Vue.js 动态为img的src赋值方法
2018/03/14 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
2018/07/18 Javascript
[57:29]Alliance vs KG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/17 DOTA
[01:48:04]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第一场 2月7日
2021/03/11 DOTA
python列表操作使用示例分享
2014/02/21 Python
Python 加密的实例详解
2017/10/09 Python
python字符串的方法与操作大全
2018/01/30 Python
python3 requests中使用ip代理池随机生成ip的实例
2018/05/07 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
2019/08/14 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
浅谈Python中re.match()和re.search()的使用及区别
2020/04/14 Python
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
东方红海科技面试题软件测试方面
2012/02/08 面试题
人代会标语
2014/06/30 职场文书
外贸业务员岗位职责
2015/02/13 职场文书
交流会主持词
2015/07/02 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书
文书工作总结(范文)
2019/07/11 职场文书
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏