mysql三种带事务批量插入
c#之mysql三种带事务批量插入
前言
对于像我这样的业务程序员开发一些表单内容是家常便饭的事情,说道表单 我们都避免不了多行内容的提交,多行内容保存,自然要用到数据库,如果循环打扰我数据库,数据库也会觉得很累,从而增加数据库服务器压力。所以小子不才,根据平时经验总结了一下用到的批量插入的方法代码。本文是针对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三种带事务批量插入的更多相关文章
- c#之mysql四种带事务批量插入
前言 对于像我这样的业务程序员开发一些表单内容是家常便饭的事情,说道表单 我们都避免不了多行内容的提交,多行内容保存,自然要用到数据库,如果循环打扰我数据库,数据库也会觉得很累,从而增加数据库服务器压 ...
- insert into 语句的三种写法 以及批量插入
方式1. INSERT INTO t1(field1,field2) VALUE(v001,v002); // 插入一条 方式2. INSERT INTO t1(field1,f ...
- MySQL三种存储引擎总结
MySQL三种存储引擎 MyISAM.InnoDB.MEMORY 1.MyISAM MyISAM,3.23.34a前的默认存储引擎. 优缺点 优点 在于占用空间小,处理速度快. 缺点 不支持事务的完整 ...
- MySQL 避免重复数据的批量插入与批量更新
[转发] 导读 我们在向数据库里批量插入数据的时候,会遇到要将原有主键或者unique索引所在记录更新的情况,而如果没有主键或者unique索引冲突的时候,直接执行插入操作. 这种情况下,有三种方式执 ...
- python实现redis三种cas事务操作
cas全称是compare and set,是一种典型的事务操作. 简单的说,事务就是为了存取数据库中同一数据时不破坏操作的隔离性和原子性,从而保证数据的一致性. 一般数据库,比如MySql是如何保证 ...
- MySQL三种InnoDB、MyISAM和MEMORY存储引擎对比
什么是存储引擎? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术,你能 ...
- mysql 三种恢复方式
为了保障数据的安全,需要定期对数据进行备份.备份的方式有很多种,效果也不一样.一旦数据库中的数据出现了错误,就需要使用备份好的数据进行还原恢复.从而将损失降到最低.下面我们来了解一下MySQL常见的有 ...
- Mysql数据库实践操作之————批量插入数据(100万级别的数据)
第一种方法:使用insert into 插入 从Redis每次获取100条数据,根据条件去插入到Mysql数据库中: 条件: 如果当前队列中的值大于1000条,则会自动的条用该方法,该方法每次获取从队 ...
- MySQL三种备份
一)备份分类 1 2 3 4 5 6 7 8 9 10 11 12 冷备:cold backup数据必须下线后备份 温备:warm backup全局施加共享锁,只能读,不能写 热备:hot backu ...
随机推荐
- 将Firefox设置为使用远程DNS
将Firefox设置为使用远程DNS 原文 https://www.my-proxy.com/blog/firefox-remote-dns 测试当前在用DNS https: ...
- android 图片特效处理之 光晕效果
这篇将讲到图片特效处理的图片光晕效果.跟前面一样是对像素点进行处理,本篇实现的思路可参见android图像处理系列之九--图片特效处理之二-模糊效果和android图像处理系列之十三--图片特效处理之 ...
- 通过js动态创建button
通过js动态创建button 一.实例描述 通过JS的DOM对象,实现元素的动态创建. 二.效果 三.代码 <!DOCTYPE html> <html lang="zh-c ...
- QQ 5.0的一些特效学习 一
虽然QQ5.0已经过去很久了,但是有些特效还是值得学习的 效果: 源码点我 导入的jar包, 一个是高版本的support.v4包,需要这个v4包中有ViewDragHelper. 我这里使用的是su ...
- RTP 和 RTSP的区别
RTP(Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输协议.RTP被定义为在一对一或一对多的传输情况下工作.其目的是提供时间信息和实现流同 ...
- 56.lambda表达式与绑定以及伪函数和绑定
#include <iostream> #include <functional> using namespace std; using namespace std::plac ...
- SQL 金额添加千分位
SELECT CONVERT(NVARCHAR(50),CAST(1000000 AS MONEY),1) SELECT CONVERT(NVARCHAR,CAST(1343432432434.8 A ...
- DG archive gap
什么是archive gap Archive Gap就是standby端日志应用的过程中丢失的一段范围的redo.典型的发生在standby端不能接收primary的redo信息或者接收后不能应用这些 ...
- errpt命令
errpt –a 详细信息 errpt -a –s [TIMESTAMP] errpt –aj [IDENTIFIER] errclear 清除(后面接参数) errpt -aj BFE4C025 ...
- Flex 转载