码迷,mamicode.com
首页 > 数据库 > 详细

mysql三种带事务批量插入

时间:2019-02-13 19:27:16      阅读:861      评论:0      收藏:0      [点我收藏+]

标签:date   一起   学习   one   target   mys   注入   注意   ref   

前言

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

一 生成数据

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

技术图片

 二 批量方法代码

第一种:常规拼接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年过完春节要好好改变一下这一年的自己,毕竟也不小了,人生多做点事就会少点遗憾,不管结果如何,我都还是我。浪迹天涯我不怕,不留遗憾在人间。

源码:https://github.com/wwg2017/demonetcore.git

mysql三种带事务批量插入

标签:date   一起   学习   one   target   mys   注入   注意   ref   

原文地址:https://www.cnblogs.com/Leo_wl/p/10371497.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!