-
2021-12-07 22:23:52
mysql
#创建测试表 CREATE TABLE `user` ( `id` varchar(32) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; #编写存储过程 DROP PROCEDURE IF EXISTS procedure_test; DELIMITER $ #这一步是因为,正常的sql中是以分号(;)为结尾,遇见分号就说明该段sql执行完了,但是在存储过程中很明显遇见分号,并没有执行完成,所以该段语句则为将结束语句的标识符(;)替换为($),数据库中一般用$或者//代替; CREATE PROCEDURE procedure_test() #创建存储过程 BEGIN DECLARE i INT DEFAULT 1; #声明变量 WHILE i <= 10 DO insert into user ( id, name, age) values (replace(UUID(), '-', ''), CONCAT('zhangsan',i), 18); SET i = i+1; END WHILE; END $ CALL procedure_test(); #调用存储过程
ORACLE
--创建测试表 CREATE TABLE "TEST_USER" ( "ID" VARCHAR2 ( 32 ) NOT NULL ENABLE, "U_NAME" VARCHAR2 ( 255 ), "U_AGE" NUMBER ( *, 0 ), PRIMARY KEY ( "ID" ) ) DECLARE i INTEGER DEFAULT 0; --声明变量 BEGIN FOR i IN 1..10 LOOP INSERT INTO TEST_USER (ID, U_NAME, U_AGE) VALUES (i, 'test' || i, 20); END LOOP; END;
更多相关内容 -
数据库批量添加数据的方法
2021-09-07 21:01:11数据库批量添加数据的方法 使用查询列表的办法来批量添加数据。 比如: insert into 表名 (字段名) select 字段名 from 自定义表 在数据库函数这里写dbo.split方法,分割字符串 SQL实现split函数,自定义分割...数据库批量添加数据的方法
使用查询列表的办法来批量添加数据。
比如:insert into 表名 (字段名) select 字段名 from 自定义表
- 在数据库函数这里写dbo.split方法,分割字符串
SQL实现split函数,自定义分割字符,自定义取出第几个分割字符前的字符串
自定义取出第几个分割字符前的字符串,默认位置(0)
格式:dbo.split(字段名,‘分隔字符’,取出的第几个字符串)
如果没有分隔的字符,则返回整个字符串。
如果取出的位置字符串的位置超出Index则返回空。USE [数据库名] GO /****** Object: UserDefinedFunction [dbo].[Split] Script Date: 2021/9/7 21:04:51 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[Split] ( @SplitString varchar(8000),-- nvarchar(4000) @Separator varchar(2) = ',' ) RETURNS @SplitStringsTable TABLE ( [id] int identity(1,1), [value] varchar(8000)-- nvarchar(4000) ) AS BEGIN DECLARE @CurrentIndex int; DECLARE @NextIndex int; DECLARE @ReturnText varchar(8000);-- nvarchar(4000) SELECT @CurrentIndex=1; WHILE(@CurrentIndex<=len(@SplitString)) BEGIN SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex); IF(@NextIndex=0 OR @NextIndex IS NULL) SELECT @NextIndex=len(@SplitString)+1; SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex); if(len(@ReturnText)>0) INSERT INTO @SplitStringsTable([value]) VALUES(@ReturnText); SELECT @CurrentIndex=@NextIndex+1; END RETURN; END
- 批量插入数据时,现将列表值分割,再从分割后的表里进行插入。
insert into 表1名 ( 字段名) SELECT pn.value as pn,isnull(k.列名2,'') as 字段名,'{0}' as Years,'{1}' as Months,t.value as TotalNum,pmc.value as pmc FROM dbo.split('{2}',',') pn LEFT JOIN 表2名 k on k.列名1=pn.value INNER JOIN (SELECT * FROM dbo.split('{3}',',')) as t on pn.id=t.id //查找分割后的值 INNER JOIN (SELECT * FROM dbo.split('{4}',',')) as pmc on pn.id=pmc.id INNER JOIN (SELECT * FROM dbo.split('{5}',',')) as w on pn.id=w.id LEFT JOIN S_PN as sp on sp.PN=pn.value", 字段名1...字段名6) //字段分别对应{}里的值
- 下面介绍SQL server的一个免费插件,可以快速搜索定位SqlServer里面的文件名,关键字,函数等
https://www.red-gate.com/products/ SqlServer查询工具
-
06-高效地向数据库批量插入数据
2022-04-16 23:02:02实现层次1:使用PreparedStatment一行行插入 public static void InsertTypeOne(int rows) { // 一行行插入 Connection conn = null; PreparedStatement ps = null; try { conn = JDBCUtils.GetConnection();...实现层次1:使用PreparedStatment一行行插入
public static void InsertTypeOne(int rows) { // 一行行插入 Connection conn = null; PreparedStatement ps = null; try { conn = JDBCUtils.GetConnection(); String sqlstr = "insert into user_info(name,email)values(?,?)"; ps = conn.prepareStatement(sqlstr); for (int i = 1; i <= rows; i++) { ps.setObject(1, "name_" + i); ps.setObject(2, i + "@gmail.com"); ps.execute(); } } catch (Exception e) { e.printStackTrace(); } finally { JDBCUtils.CloseResource(conn, ps); } }
实现层次2:使用addBatch(),executeBatch(),clearBatch()攒一波批量插入
public static void InsertTypeTwo(int rows) { // 使用addBatch(),executeBatch(),clearBatch() 批量插入数据 // mysql服务器默认是关闭批处理的,我们需要通过一个参数,让mysql开启批处理的支持。 // ?rewriteBatchedStatements=true 写在配置文件的url后面 // 如之前是 jdbc:mysql://localhost:3306/stock?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC // 更新为 jdbc:mysql://localhost:3306/stock?rewriteBatchedStatements=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC Connection conn = null; PreparedStatement ps = null; try { conn = JDBCUtils.GetConnection(); String sqlstr = "insert into user_info(name,email)values(?,?)"; ps = conn.prepareStatement(sqlstr); for (int i = 1; i <= rows; i++) { ps.setObject(1, "name_" + i); ps.setObject(2, i + "@gmail.com"); // 1. 攒sql ps.addBatch(); if (i % 500 == 0){ // 2. 攒一批执行一次 ps.executeBatch(); // 3. 执行后要清空一下 ps.clearBatch(); }else if (i == rows){ ps.executeBatch(); ps.clearBatch(); } } } catch (Exception e) { e.printStackTrace(); } finally { JDBCUtils.CloseResource(conn, ps); } }
实现层次3:在2的基础上,关闭自动提交
public static void InsertTypeThree(int rows) { // 插入数据时先禁止自动提交,数据全部execute后,再进行提交,最后再恢复自动提交 Connection conn = null; PreparedStatement ps = null; try { conn = JDBCUtils.GetConnection(); // 1. 设置不自动提交数据 conn.setAutoCommit(false); String sqlstr = "insert into user_info(name,email)values(?,?)"; ps = conn.prepareStatement(sqlstr); for (int i = 1; i <= rows; i++) { ps.setObject(1, "name_" + i); ps.setObject(2, i + "@gmail.com"); // 1. 攒sql ps.addBatch(); if (i % 500 == 0) { // 2. 攒一批执行一次 ps.executeBatch(); // 3. 执行后要清空一下 ps.clearBatch(); } else if (i == rows) { ps.executeBatch(); ps.clearBatch(); } } // 2. 提交数据 conn.commit(); // 3. 提交完再设置自动提交 conn.setAutoCommit(true); } catch (Exception e) { e.printStackTrace(); } finally { JDBCUtils.CloseResource(conn, ps); } }
在本地测试时,效率如下:
public static void main(String[] args) { int rows = 20000; long tstart = System.currentTimeMillis(); // InsertTypeOne(rows);// 插入 20000 行数据,共耗时 41748 // InsertTypeTwo(rows);// 插入 20000 行数据,共耗时 904 InsertTypeThree(rows);// 插入 20000 行数据,共耗时 846 long tend = System.currentTimeMillis(); System.out.println("插入 " + rows + " 行数据,共耗时 " + (tend - tstart)); }
其中,方式3在数据量增大的情况下,是会有明显地效率提升。这里只使用了2万行数据,体现得不明显。
package batchinsert; import utils.JDBCUtils; import java.sql.Connection; import java.sql.PreparedStatement; public class BatchInsert { public static void main(String[] args) { int rows = 20000; long tstart = System.currentTimeMillis(); // InsertTypeOne(rows);// 插入 20000 行数据,共耗时 41748 // InsertTypeTwo(rows);// 插入 20000 行数据,共耗时 904 InsertTypeThree(rows);// 插入 20000 行数据,共耗时 846 long tend = System.currentTimeMillis(); System.out.println("插入 " + rows + " 行数据,共耗时 " + (tend - tstart)); } public static void InsertTypeOne(int rows) { // 一行行插入 Connection conn = null; PreparedStatement ps = null; try { conn = JDBCUtils.GetConnection(); String sqlstr = "insert into user_info(name,email)values(?,?)"; ps = conn.prepareStatement(sqlstr); for (int i = 1; i <= rows; i++) { ps.setObject(1, "name_" + i); ps.setObject(2, i + "@gmail.com"); ps.execute(); } } catch (Exception e) { e.printStackTrace(); } finally { JDBCUtils.CloseResource(conn, ps); } } public static void InsertTypeTwo(int rows) { // 使用addBatch(),executeBatch(),clearBatch() 批量插入数据 // mysql服务器默认是关闭批处理的,我们需要通过一个参数,让mysql开启批处理的支持。 // ?rewriteBatchedStatements=true 写在配置文件的url后面 // 如之前是 jdbc:mysql://localhost:3306/stock?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC // 更新为 jdbc:mysql://localhost:3306/stock?rewriteBatchedStatements=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC Connection conn = null; PreparedStatement ps = null; try { conn = JDBCUtils.GetConnection(); String sqlstr = "insert into user_info(name,email)values(?,?)"; ps = conn.prepareStatement(sqlstr); for (int i = 1; i <= rows; i++) { ps.setObject(1, "name_" + i); ps.setObject(2, i + "@gmail.com"); // 1. 攒sql ps.addBatch(); if (i % 500 == 0) { // 2. 攒一批执行一次 ps.executeBatch(); // 3. 执行后要清空一下 ps.clearBatch(); } else if (i == rows) { ps.executeBatch(); ps.clearBatch(); } } } catch (Exception e) { e.printStackTrace(); } finally { JDBCUtils.CloseResource(conn, ps); } } public static void InsertTypeThree(int rows) { // 插入数据时先禁止自动提交,数据全部execute后,再进行提交,最后再恢复自动提交 Connection conn = null; PreparedStatement ps = null; try { conn = JDBCUtils.GetConnection(); // 1. 设置不自动提交数据 conn.setAutoCommit(false); String sqlstr = "insert into user_info(name,email)values(?,?)"; ps = conn.prepareStatement(sqlstr); for (int i = 1; i <= rows; i++) { ps.setObject(1, "name_" + i); ps.setObject(2, i + "@gmail.com"); // 1. 攒sql ps.addBatch(); if (i % 500 == 0) { // 2. 攒一批执行一次 ps.executeBatch(); // 3. 执行后要清空一下 ps.clearBatch(); } else if (i == rows) { ps.executeBatch(); ps.clearBatch(); } } // 2. 提交数据 conn.commit(); // 3. 提交完再设置自动提交 conn.setAutoCommit(true); } catch (Exception e) { e.printStackTrace(); } finally { JDBCUtils.CloseResource(conn, ps); } } }
-
JDBC连接MySQL数据库批量插入数据过程详解
2020-08-25 09:56:42主要介绍了JDBC连接MySQL数据库批量插入数据过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 -
向数据库中批量插入大量数据
2020-12-25 19:27:55后来才发现要批量执行的话,JDBC连接URL字符串中需要新增一个参数:rewriteBatchedStatements=true 例如:jdbc:mysql://127.0.0.1:8080/xihudb?rewriteBatchedStatements=true 没有 rewriteBatchedStatements=true ...1. addBatch(sql)
Class.forName("com.mysql.jdbc.Driver");//指定连接类型 Connection con = DriverManager.getConnection(url, username, password); PreparedStatement pst = con.prepareStatement(""); for (int i = 0; i < 10; i++) { StringBuilder sql = new StringBuilder(); sql.append("INSERT INTO extenal_studentcj(grade,clazz,zkzh,NAME,scoretext,times) VALUES("); sql.append("'").append(i).append("',"); sql.append("'").append(i).append("',"); sql.append("'").append(i).append("',"); sql.append("'").append(i).append("',"); sql.append("'").append(i).append("',"); sql.append("'").append(i).append("'"); sql.append(");"); pst.addBatch(sql.toString()); } pst.executeBatch(); pst.close(); con.close();
2. addBatch()
Class.forName("com.mysql.jdbc.Driver");//指定连接类型 Connection con = DriverManager.getConnection(url, username, password); String sql = "INSERT INTO extenal_studentcj(grade,clazz,zkzh,NAME,scoretext,times) VALUES(?,?,?,?,?,?)"; PreparedStatement pst = con.prepareStatement(sql); for (int i = 0; i < 10; i++) { int idx = 1; pst.setString(idx++, i + ""); pst.setString(idx++, i + ""); pst.setString(idx++, i + ""); pst.setString(idx++, i + ""); pst.setString(idx++, i + ""); pst.setLong(idx++, i); pst.addBatch(); } pst.executeBatch(); pst.close(); con.close();
后来才发现要批量执行的话,JDBC连接URL字符串中需要新增一个参数:
rewriteBatchedStatements=true
例如:
jdbc:mysql://127.0.0.1:8080/xihudb?rewriteBatchedStatements=true
没有 rewriteBatchedStatements=true 则都是forEach. 开启后 addBatch(),addBatch(sql)使用的都是一次发送
3. 拼接SQL语句
拼接SQL
<insert id="insert" parameterType="com.Info"> insert into pp (str1, str2) values <foreach collection="ps" item="p" separator=","> (#{p.str1,jdbcType=VARCHAR}, #{p.str2,jdbcType=VARCHAR}, </foreach> </insert>
三者之间的相对速度比较:
JDBC BATCH(1)> Mybatis BATCH(2) > 拼接SQL(4) -
SQL*Loader 向oracle数据库批量添加数据 .bat脚本 使用方式见文章
2017-09-11 17:07:29与.ctl文件配合使用 sqlldr userid=qxt_log/dddddd@172.16.0.0:21111/gdttt control=C:\Users\yilin\Desktop\input_147.ctl errors=10000000 pause -
php批量添加数据与批量更新数据的实现方法
2021-01-21 15:42:33本文实例讲述了php批量添加数据与批量更新数据的实现方法。分享给大家供大家参考。具体分析如下: php如果要批量保存数据我们只要使用sql的insert into语句就可能实现数据批量保存了,如果是更新数据使用update set就... -
sql下三种批量插入数据的方法
2020-12-15 14:16:09第一种方法是使用循环语句逐个将数据项插入到数据库中;第二种方法使用的是SqlBulkCopy,使您可以用其他源的数据有效批量加载 SQL Server 表;第三种使用的方法是sql server中的表值参数方法,表值参数是 SQL Server... -
Node.js下向MySQL数据库插入批量数据的方法
2020-12-16 11:48:32项目(nodejs)中需要一次性插入多笔数据到数据库,数据库是mysql的,由于循环插入的性能太差,就像使用批量插入的方法提高数据的插入性能。 批量插入的数据库的表结构如下: 1.数据库连接 var mysql = require('... -
如何批量导入数据到Sqlite数据库
2020-12-14 20:04:32做android和ios开发的一般都用Sqlite数据库,有的时候数据需要批量导入,那么如何导入呢? 在这里,介绍2种方法供大家参考。 一、用sqlite命令 以windows系统为例,linux下命令是一样的。 1.安装... -
SQL*Loader 向oracle数据库批量添加数据 .ctl文件 使用方式详见文章
2017-09-11 17:04:24与.bat脚本配合使用 load data infile 'C:\Users\yilin\Desktop\abc.txt' append into table FJH_TMP fields terminated by " " (A) -
Jmeter向数据库批量插入数据
2018-05-09 16:14:02Jmeter是一个轻量级的性能测试工具,这是已经总所周知的问题,今天我还知道了原来使用jmeter可以批量的向数据库插入数据,这个功能在实际工作中也可以帮我们提高工作效率。在以往的项目中,当需要做批量数据的简单... -
Android批量插入数据到SQLite数据库的方法
2020-08-30 23:32:53主要为大家详细介绍了Android批量插入数据到SQLite数据库的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
Java通过JDBC向数据库批量插入数据(MySQL为例)
2022-03-13 10:44:54在数据库中需要大量插入或更新记录时,可以使用java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。 1、 JDBC的批量处理语句: addBatch(String):添加需要批量处理的SQL语句或是参数; e -
django 给数据库批量添加数据
2019-07-31 19:06:00def index(request): ... 批量导入数据: Booklist=[] for i in range(100): Booklist.append(Book(title="book"+str(i),price=30+i*i)) Boo 转载于:https://www.cnblogs.com/o... -
C#.NET中如何批量插入大量数据到数据库中
2020-09-03 06:13:21主要给大家介绍C#.net中如何批量插入大量数据到数据库中,本文涉及到C#.net中批量插入数据到数据库中方面的内容,对C#.net批量插入数据到数据库中感兴趣的朋友可以参考下本 -
C#/.Net 中快速批量给SQLite数据库插入测试数据
2020-09-03 15:21:35主要介绍了C#/.Net 中快速批量给SQLite数据库插入测试数据,本文直接给出实例代码,需要的朋友可以参考下 -
一个工具类搞定批量插入增加数据到Mysql数据库
2018-05-08 10:37:28只要学我一样编写这么一个工具类便可以实现批量插入多条数据,百条,千条,万条,后期还会继续优化增加数据时的速度!有点代码基础的保证能看懂,此项目已经有了前端界面你可以直接的导入然后运行测试既可以了,表... -
PHP向MYSQL数据库批量添加数据
2010-06-21 15:21:12PHP向MYSQL数据库批量添加数据。首先接受过来的数据都在$_POST里,通过foreach我们来处理,我举个最简单的例子。 比如一些处理sql注入或js注入的函数叫check(); return 的是被处理后的结果,而非真或假。 -
达梦数据库批量建表
2018-01-05 15:52:40国产数据库达梦数据库,利用存储函数可以方便快捷建立大量测试用表 -
MySQl数据库-批量添加数据的两种方法
2017-07-29 15:58:04但是当你需要测试大量数据时,比如要统计一年、一个月、一个星期的数据的区别,而且需求是必须每天都要有数据,这时就需要批量添加数据。在这里以user表为例,记录如何添加数据。 方法一:使用excel表格 方法二:... -
MySQL数据库批量添加测试数据
2019-08-12 10:57:20MySQL数据库批量添加测试数据 使用Navicat视图化工具构建数据库 在数据库中找到函数项,右键新建过程函数,具体代码如下,执行即可添加一千条模拟数据: BEGIN declare i int; set i=1; while i<1001 ... -
向数据库批量添加数据
2008-03-03 00:03:00declare @i intset @i=1while @ibegin insert into news(title,contents) values(标题+CONVERT(nvarchar(50),@i),新闻内容) set @i=@i+1end -
3分钟如何向MySQL数据库中插入100万条数据
2020-12-14 20:04:52一、编写测试案例向MySQL数据库中插入百万条数据。测试数据表建表脚本如下:use db_xk; drop table if exists tb_test2; create table tb_test2 ( id int primary key auto_increment, subject varchar(50) ... -
Navicat使用导入向导批量插入数据到数据库(以导入txt文件为例)
2020-12-14 09:35:151、准备好格式化数据后的txt文件(格式化数据就是将不同字段的数据间用相同的分隔符分开,我用的是Tab符分隔) 原创文章 1获赞 2访问量 16 关注 私信 展开阅读全文 作者:weixin_46298946 -
批量插入数据到数据库请使用MysqlBulkCopy.dll.zip
2019-07-30 14:14:22源码批量添加到SQLServer和Mysql数据库。源码包含有不同方法的添加,第一种逐条添加,第二种批量加入,其批量加实现原理其实就是把数据存入内存表(DataTable)中使用Backcopy一次性加入数据库。添加dll引用即可调用... -
批量往数据库添加数据
2019-08-20 21:22:07Connection conn = getCon(); //获取连接已经封装过的方法 ... Long beginTime = System.currentTimeMillis();...试了一下,如果是简单的数据,即便添加百万,千万条数据也仅需要若干秒。 -
mybatis 批量将list数据插入到数据库的实现
2020-08-18 22:03:25主要介绍了mybatis 批量将list数据插入到数据库的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 -
利用jmeter向数据库插入批量数据
2020-10-22 17:00:14使用jmeter可以批量的向数据库插入数据,这个功能在实际工作中也可以帮我们提高工作效率。 接下来开始介绍jmeter如何向数据库插入批量数据 1、首先先添加CSVDataSetConfig,用于读取我们的大批量文件 1.1 ...
收藏数
131,829
精华内容
52,731