MySQL中几种插入和批量语句实例详解
本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《MySQL中几种插入和批量语句实例详解》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~
这里为了方便演示,我新建了一个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中几种插入和批量语句实例详解》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于数据库的相关知识,请关注golang学习网公众号!
一次MySQL启动导致的事故实战记录
- 上一篇
- 一次MySQL启动导致的事故实战记录
- 下一篇
- MySQL 如何限制一张表的记录数
-
- 威武的春天
- 受益颇多,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢up主分享博文!
- 2023-04-02 02:38:58
-
- 高大的台灯
- 这篇文章内容真及时,太全面了,感谢大佬分享,收藏了,关注博主了!希望博主能多写数据库相关的文章。
- 2023-03-11 18:44:19
-
- 开朗的海燕
- 真优秀,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢师傅分享文章!
- 2023-03-10 06:33:17
-
- 动听的钢笔
- 写的不错,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢师傅分享博文!
- 2023-03-08 14:26:39
-
- 沉默的硬币
- 这篇技术文章真是及时雨啊,细节满满,太给力了,码住,关注作者大大了!希望作者大大能多写数据库相关的文章。
- 2023-03-01 11:04:56
-
- 激动的乐曲
- 这篇技术贴太及时了,太全面了,太给力了,已收藏,关注老哥了!希望老哥能多写数据库相关的文章。
- 2023-02-26 20:18:39
-
- 呆萌的冬瓜
- 很好,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,看完之后很有帮助,总算是懂了,感谢师傅分享文章!
- 2023-02-26 14:57:06
-
- 糟糕的服饰
- 太细致了,码住,感谢楼主的这篇技术贴,我会继续支持!
- 2023-02-26 06:16:30
-
- 笑点低的花瓣
- 这篇技术文章真是及时雨啊,太细致了,很好,码起来,关注老哥了!希望老哥能多写数据库相关的文章。
- 2023-02-22 11:45:14
-
- 兴奋的糖豆
- 太详细了,收藏了,感谢师傅的这篇技术贴,我会继续支持!
- 2023-02-22 02:53:21
-
- 数据库 · MySQL | 31分钟前 | MySQL · 数据库开发 · mysql 递归CTE WITH RECURSIVE cte_max_recursion_depth 层级查询
- MySQL 递归 CTE 怎样设置层级停止条件
- 392浏览 收藏
-
- 数据库 · MySQL | 33分钟前 |
- MySQL CTE 怎样避免重复写复杂子查询
- 150浏览 收藏
-
- 数据库 · MySQL | 41分钟前 |
- MySQL JSON_SEARCH 怎样按通配符找到 JSON 字符串路径
- 288浏览 收藏
-
- 数据库 · MySQL | 47分钟前 | MySQL · JSON · 索引 · 性能 · explain · mysql 索引 JSON json_extract 生成列 JSON_UNQUOTE
- MySQL JSON 字段索引为什么没有命中
- 155浏览 收藏
-
- 数据库 · MySQL | 47分钟前 |
- MySQL JSON_EXTRACT 返回带引号怎样处理
- 440浏览 收藏
-
- 数据库 · MySQL | 49分钟前 |
- MySQL JSON_STORAGE_FREE 怎样判断部分更新留下的空间
- 347浏览 收藏
-
- 数据库 · MySQL | 57分钟前 |
- MySQL 窗口函数怎样计算每组累计金额
- 172浏览 收藏
-
- 数据库 · MySQL | 22小时前 | 连接池 · 故障排查 · MySQL教程 · mysql 连接池 wait_timeout database/sql SetConnMaxIdleTime SetConnMaxLifetime 空闲连接 PingContext
- MySQL 连接池空闲连接失效 怎样处理
- 350浏览 收藏
-
- 数据库 · MySQL | 22小时前 | MySQL · 数据库 · csv · 数据导入 · CSV导入 MySQL LOAD DATA LOAD DATA LOCAL INFILE MySQL批量导入
- MySQL LOAD DATA 读取 CSV 怎样处理
- 307浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 600次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 641次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 673次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 639次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 458次使用
-
- MySQL数据库10秒内插入百万条数据的实现
- 2022-12-30 327浏览
-
- mysql 大表批量删除大量数据的实现方法
- 2023-01-09 340浏览
-
- 教你如何6秒钟往MySQL插入100万条数据的实现
- 2022-12-30 220浏览
-
- MySQL select、insert、update批量操作语句代码实例
- 2023-01-11 133浏览
-
- MySQL实现数据批量更新功能详解
- 2023-02-25 143浏览

