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服务添加 iptables防火墙策略的方案
Apr 29 MySQL
MySQL COUNT函数的使用与优化
May 10 MySQL
MySQL 8.0 Online DDL快速加列的相关总结
Jun 02 MySQL
MySQL8.0.18配置多主一从
Jun 21 MySQL
MySQL中存储时间的最佳实践指南
Jul 01 MySQL
MySQL系列之四 SQL语法
Jul 02 MySQL
mysql脏页是什么
Jul 26 MySQL
MySQL千万级数据表的优化实战记录
Aug 04 MySQL
MySQL悲观锁与乐观锁的实现方案
Nov 02 MySQL
Mysql调整优化之四种分区方式以及组合分区
Apr 13 MySQL
MySQL详解进行JDBC编程与增删改查方法
Jun 16 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
浅谈Windows下 PHP4.0与oracle 8的连接设置
2006/10/09 PHP
PHP详细彻底学习Smarty
2008/03/27 PHP
php中cookie的作用域
2008/03/27 PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
2011/12/25 PHP
smarty巧妙处理iframe中内容页的代码
2012/03/07 PHP
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
JavaScript高级程序设计
2006/12/29 Javascript
用JS写的一个TableView控件代码
2010/01/23 Javascript
jQuery点击tr实现checkbox选中的方法
2013/03/19 Javascript
js 用CreateElement动态创建标签示例
2013/11/20 Javascript
javascript移出节点removeChild()使用介绍
2014/04/03 Javascript
Bootstrap每天必学之导航
2015/11/26 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
angularjs路由传值$routeParams详解
2020/09/05 Javascript
jQuery实现的form转json经典示例
2017/10/10 jQuery
JavaScript类数组对象转换为数组对象的方法实例分析
2018/07/24 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
浅谈JavaScript 代码简洁之道
2019/01/09 Javascript
JavaScript Tab菜单实现过程解析
2020/05/13 Javascript
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
2018/12/12 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
pytorch 图像预处理之减去均值,除以方差的实例
2020/01/02 Python
python实现根据给定坐标点生成多边形mask的例子
2020/02/18 Python
Python request使用方法及问题总结
2020/04/26 Python
python代码区分大小写吗
2020/06/17 Python
实例教程 利用html5和css3打造一款创意404页面
2014/10/20 HTML / CSS
马来西亚太阳镜、眼镜和隐形眼镜网上商店:Focus Point
2018/12/13 全球购物
乌克兰的第一家手表店:Deka
2020/03/05 全球购物
华为c/c++笔试题
2016/01/25 面试题
程序员岗位职责
2013/11/11 职场文书
高一数学教学反思
2014/02/07 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS