前言

对于像我这样的业务程序员开发一些表单内容是家常便饭的事情,说道表单 我们都避免不了多行内容的提交,多行内容保存,自然要用到数据库,如果循环打扰我数据库,数据库也会觉得很累,从而增加数据库服务器压力。所以小子不才,根据平时经验总结了一下用到的批量插入的方法代码。本文是针对c#语言开发,数据库是mysql数据库。当然我这是单片机的本地电脑运行,跟服务器上有很大区别,到了服务器上可能跑的比这快的多,话不多说看下文。

一 生成数据

简而言之吧,就拿五万数据实验吧,这里面我就收集了五万条数据

二 批量方法代码

第一种:采用mysql中MySql.Data.MySqlClient.MySqlBulkLoader

看到了这种耗时只需要406毫秒,刺激不,惊喜不,意外不,这个逻辑是先把数据集合转化成table,然后再把table转成csv文件保存到临时文件夹,再利用MySqlBulkLoader对象加载这个csv文件,这个过程是最消耗时间的,最后事务提交,这是最快的方式,五百万数据执行42秒

第二种:常规拼接sql

我们看到了对于五万条数据 ,这种拼接sql方法只用了866毫秒级,这种方式最大的好处就是效率快快快,劣势就是拼接繁琐,没有防参数化注入。

第三种:SqlDataAdapter的批量更新DataTable集合

首先我们了解一下SqlDataAdapter

它是 DataSet和 SQL Server之间的桥接器。SqlDataAdapter通过对数据源使用适当的Transact-SQL语句映射 Fill(它可填充DataSet中的数据以匹配数据源中的数据)和 Update(它可更改数据源中的数据以匹配 DataSet中的数据)来提供这一桥接。当SqlDataAdapter填充 DataSet时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。

总的来说,批量更新数据需要的对象主要有三个有:

SqlDataAdapter核心对象

SqlCommand 总共需要四个,分别对应数据表的select、add、update、delete操作。具体解释一下。对一张数据表,可能执行四种操作,就是增加、删除、修改、查询,当SqlDataAdapter最后提交操作时,会根据数据表中的每一条记录的标志(增加、删除、修改、查询)来使用对应的SqlCommand对它(一条记录)进行操作,所以需要四个。

DataSet或DataTable等存储待更新到数据库中的数据。

这样,我们为了实现数据表的批量更新,可以先把数据表查询到DataSet或DataTable中,然后对其进行各种修改,最后写回到数据库中。

第四种:Dapper自带内部集合插入

这种效率最差了,但是对于数据量小的情况下,无妨,简单快捷

三 总结以上

相信大家可以看出效率了吧,首先讲一下value和values区别‘:如果数据少的情况下values快点,如果数据量大,value快点。

第一种 需要建立临时文件,如果数据大会占用服务器内存,但是效率最快,直接传输文件。

第二种拼接sql好处是效率快,坏处是如果sql多的话 ,1 :比较繁琐,拼接sql稍微不注意就会拼接错误。2如果同时要添加多张表,就要把好几个sql放在一个事务里面一起提交。

第三种我觉得好处是省时省力,数据量小的情况下 效率也行,只用一次访问数据库。

第四种当然是dapper在数据量大情况下是最慢的。但是是最简单的。

所以对于以上,我觉如果几百条以下的数据还是dapper比较划算,最简单。,哦对了还有一种就是循环插入,但是那样没有保证数据一致,还有分批插入也法保证数据一致,我写博客一般都是比较简单分享 ,我不会长篇大论滔滔不绝,最后还没有头尾,可能我的阅历比较少,所以没有内涵,希望广大网友见谅,我会以后多多学习和请教各位

四 感言

这是我第一次写博客,以前都是看着比人写,我都是敬而远之,我想明白了,如果不敢迈出第一步,永远都没有第二步,有些事不要害怕去做,不然不做更害怕。2019年过完春节要好好改变一下这一年的自己,毕竟也不小了,人生多做点事就会少点遗憾,不管结果如何,我都还是我。浪迹天涯我不怕,不留遗憾在人间。

c#之mysql四种带事务批量插入的更多相关文章

  1. mysql三种带事务批量插入

    原文:mysql三种带事务批量插入 c#之mysql三种带事务批量插入 前言 对于像我这样的业务程序员开发一些表单内容是家常便饭的事情,说道表单 我们都避免不了多行内容的提交,多行内容保存,自然要用到 ...

  2. Mysql 四种事务隔离介绍以及锁机制

    还有很多不太懂,这里收集几份大佬文章“飞机票”,待我整理好了,再好好写一篇文章吧. MySQL的四种事务隔离级别 https://www.cnblogs.com/huanongying/p/70215 ...

  3. mysql四种事务隔离级别

    mysql事务并发问题 ACID什么的就不啰嗦了.mysql多个事务并发的时候,可能会出现如下问题: 1. 更新丢失 即两个事务同时更新某一条数据,后执行的更新操作会覆盖先执行的更新操作,导致先执行的 ...

  4. MySQL四种事务隔离级别详解

    本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做 ...

  5. 【转载】mysql 四种隔离级别分析

    sql标准中,有四种隔离级别,各个离级别都有各自的规则,隔离级别越低,允许并发越大,消耗的资源越少,但是越不安全,下面就mysql数据库来分别介绍一下(每个存储引擎实施的隔离级别会有稍微的不同)mys ...

  6. MySQL 四种隔离级别

    什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...

  7. 【概念原理】四种SQL事务隔离级别和事务ACID特性

    摘要: SQL事务隔离级别和事务的ACID特性 事务是一组读写操作,并且具有只有所有操作都成功才算成功的特性.   事务隔离级别 SQL事务隔离级别由弱到强分别是:READ_UNCOMMITTED.R ...

  8. MySql四种隔离级别

    什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...

  9. 面试问烂的 MySQL 四种隔离级别,看完吊打面试官!

    阅读本文大概需要 5.6 分钟. 来源:网络 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操 ...

随机推荐

  1. marquee

    marquee: 页面的自动滚动效果,可由javascript来实现,但是今天无意中发现了一个html标签 - <marquee></marquee>可以实现多种滚动效果,无需 ...

  2. docker部署mysql 实现远程连接

    1. docker search mysql    # 查看mysql版本 2. docker pull mysql:5.7   # 拉取mysql 5.7 3. docker images  # 查 ...

  3. java bigdecimal (java double也时会失真)

    BigDecimal加减乘除运算 2011-11-21 21:22 6470人阅读 评论(0) 收藏 举报 stringdivjavaup工具 java.math.BigDecimal.BigDeci ...

  4. 洛谷 P1358 扑克牌

    P1358 扑克牌 题目描述 组合数学是数学的重要组成部分,是一门研究离散对象的科学,它主要研究满足一定条件的组态(也称组合模型)的存在.计数以及构造等方面的问题.组合数学的主要内容有组合计数.组合设 ...

  5. 洛谷 P2021 faebdc玩扑克

    P2021 faebdc玩扑克 题目背景 faebdc和zky在玩一个小游戏 题目描述 zky有n个扑克牌,编号从1到n,zky把它排成一个序列,每次把最上方的扑克牌放在牌堆底,然后把下一张扑克牌拿出 ...

  6. worktools-源码下拉问题

    今天下拉源码的时候,出现了一个问题,就是当地的内容跟仓库的内容冲突,导致merge冲突.这时候CC指令不能用.然后希望通过checkout到其他分支,然后cc掉的.结果没办法切换到其他分支,一直停留在 ...

  7. code blocks常用快捷键

    CodeBlocks常用操作快捷键 编辑部分: Ctrl + A:全选 Ctrl + C:复制 Ctrl + X: 剪切 Ctrl + V:粘贴 Ctrl + Z:撤销(后退一步) Ctrl + S: ...

  8. jQ-多选按钮实现单选按钮的功能以及input按钮的优化

    css: .displayN{display: none;} label {font-size:12px;cursor:pointer;} label i {font-size:12px;font-s ...

  9. NOIP2016 天天爱跑步(线段树/桶)

    题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.天天爱跑步是一个养成类游戏,需要 玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 N个结点 ...

  10. cocos2d-x嵌入移动MM短代支付IAP2.4的SDK,点击支付崩溃的解决的方法

    凡是用IAP2.4,调用purchase.order 游戏崩溃.logcat报错是: 06-16 18:43:42.944: E/AndroidRuntime(8526): FATAL EXCEPTI ...