原文: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三种带事务批量插入的更多相关文章

  1. c#之mysql四种带事务批量插入

    前言 对于像我这样的业务程序员开发一些表单内容是家常便饭的事情,说道表单 我们都避免不了多行内容的提交,多行内容保存,自然要用到数据库,如果循环打扰我数据库,数据库也会觉得很累,从而增加数据库服务器压 ...

  2. insert into 语句的三种写法 以及批量插入

    方式1. INSERT INTO t1(field1,field2) VALUE(v001,v002);            // 插入一条 方式2. INSERT INTO t1(field1,f ...

  3. MySQL三种存储引擎总结

    MySQL三种存储引擎 MyISAM.InnoDB.MEMORY 1.MyISAM MyISAM,3.23.34a前的默认存储引擎. 优缺点 优点 在于占用空间小,处理速度快. 缺点 不支持事务的完整 ...

  4. MySQL 避免重复数据的批量插入与批量更新

    [转发] 导读 我们在向数据库里批量插入数据的时候,会遇到要将原有主键或者unique索引所在记录更新的情况,而如果没有主键或者unique索引冲突的时候,直接执行插入操作. 这种情况下,有三种方式执 ...

  5. python实现redis三种cas事务操作

    cas全称是compare and set,是一种典型的事务操作. 简单的说,事务就是为了存取数据库中同一数据时不破坏操作的隔离性和原子性,从而保证数据的一致性. 一般数据库,比如MySql是如何保证 ...

  6. MySQL三种InnoDB、MyISAM和MEMORY存储引擎对比

    什么是存储引擎? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术,你能 ...

  7. mysql 三种恢复方式

    为了保障数据的安全,需要定期对数据进行备份.备份的方式有很多种,效果也不一样.一旦数据库中的数据出现了错误,就需要使用备份好的数据进行还原恢复.从而将损失降到最低.下面我们来了解一下MySQL常见的有 ...

  8. Mysql数据库实践操作之————批量插入数据(100万级别的数据)

    第一种方法:使用insert into 插入 从Redis每次获取100条数据,根据条件去插入到Mysql数据库中: 条件: 如果当前队列中的值大于1000条,则会自动的条用该方法,该方法每次获取从队 ...

  9. MySQL三种备份

    一)备份分类 1 2 3 4 5 6 7 8 9 10 11 12 冷备:cold backup数据必须下线后备份 温备:warm backup全局施加共享锁,只能读,不能写 热备:hot backu ...

随机推荐

  1. Icomparer和Icomparable集合排序

    c#中实现对象集合的排序可以使用ArrayList中的Sort()方法,而有比较才能谈排序,因为不是基本类型(如string ,int.double......等)所以.NET Framework不可 ...

  2. locate---查找文件

  3. telint---切换当前正在运行的Linux系统的运行等级

    telint命令用于切换当前正在运行的Linux系统的运行等级 Send control commands to the init daemon. --help Show this help --no ...

  4. IDLE的自动补全功能

    IDLE的自动补全功能位于:Edit→Show Completions,但每次需要补全的时候都需要点击一次,虽然IDLE提供了一个快捷键(Ctrl + Space),但实测无效.具体操作如下图

  5. 解决xorm逆向mssql报datetime2不兼容的异常错误

    xorm作为golang开发者的一大利器,深受大家的喜爱,可是最近在逆向mssql的时候,报了这么一个错误: 最后找了半天发现xorm没有预置DateTime2类型,经过几番折腾,在xorm源码的en ...

  6. [Javascript] Classify JSON text data with machine learning in Natural

    In this lesson, we will learn how to train a Naive Bayes classifier and a Logistic Regression classi ...

  7. Oracle442个应用场景-----------Oracle数据库物理结构

    -------------------------Oracle数据库物理结构------------------------------- Oracle数据库物理结构     oracle的数据,实际 ...

  8. Android使用蓝牙连接adb调试App

    使用WiFi连接Android设备调试APP的教程非常多,可是项目中须要使用蓝牙进行通信.所以牵扯使用蓝牙调用adb. 1.   将电脑蓝牙与手机进行配对(控制面板->设备和打印机->加入 ...

  9. Windows 98 二十岁了,这些功能都是从它开始的(虽然 Windows 98 不如 Windows 95 那样具有革命性,但完成度更高,更加成熟。到最后还是:相见不如怀念。)

    1998 年 6 月 25 日午夜,美国著名连锁零售店 CompUSA 门外挤满了狂热的消费者和媒体,他们在等待一款软件发售:Windows 98,即使明知它要到当天早上才正式上市. ▲ 在 Comp ...

  10. (43)JS运动之链式运动框架

    链式运动框架就是一系列的运动分阶段进行,在普通的运动框架上加上一个參数function,这个function表示下一个要运行的动作.详细代码例如以下: <!DOCTYPE HTML> &l ...