精华内容
下载资源
问答
  • 2018-08-03 17:25:05

     

    DROP PROCEDURE if exists insert_emps_test;

    下面就开始创建存储过程插入数据

    DELIMITER //不加这个会报错,坑了我两个小时
    CREATE PROCEDURE insert_emps_test(IN loop_times INT)
    BEGIN
        DECLARE var INT DEFAULT 0;
        WHILE var < loop_times DO
            INSERT INTO ssm_sample.tbl_emp VALUES (NULL,'abc','M','abc@qq.com',3);//执行的sql语句
            SET var = var + 1;
        END WHILE;
    END
    //
    DELIMITER ;

     

    CALL insert_emps_test(100000);    //调用,插入10万条数据两分钟

     

     SELECT COUNT(*) FROM tbl_emp ;  //查看一下条数

    更多相关内容
  • MySQL创建存储过程批量插入10万条数据 存储过程 1、首先防止主键冲突,我们清空表。 TRUNCATE table A_student; 2、编写存储过程 delimiter ‘$’; CREATE PROCEDURE batchInsert(in args int) BEGIN declare i int ...
  • MySQL存储过程插入数据过慢处理方法

    千次阅读 2018-12-07 08:44:31
    在使用存储过程进行千万条数据插入的时候,插入效率在每分钟七千条左右,这样算下来,需要几十个小时,所以找了一下优化的方法,除了对存储过程本身的优化,还有就是修改了MySQL的配置文件的部分参数 我做了以下...

    在使用存储过程进行千万条数据的插入的时候,插入效率在每分钟七千条左右,这样算下来,需要几十个小时,所以找了一下优化的方法,除了对存储过程本身的优化,还有就是修改了MySQL的配置文件的部分参数

    我做了以下几个参数的修改

    • innodb_log_file_size = 1024M

      日志组中的每个日志文件的大小,设置较大的值可以减少脏数据刷新到磁盘的次数

    • innodb_log_buffer_size = 256M  

    将日志写入日志磁盘文件前的缓冲大小,默认是16M,设置较大的值可以使日志在缓冲时不需要被保存到磁盘,减少磁盘读取次数

    • innodb_flush_log_at_trx_commit = 0

    将日志中的缓冲数据写入磁盘,默认为1,即每次提交事务都会写入磁盘,改为0后将减少写入磁盘的次数

    • innodb_buffer_pool_size = 4G

    该值用来高速缓冲数据和索引内存缓冲大小,也是减少磁盘IO来增加速度,一般设置为物理存储的60%~70%

    • innodb_buffer_pool_instances = 4 

    增加多个缓冲池,提高并行内存读写能力

    • innodb_write_io_threads = 8  &&  innodb_read_io_threads = 8

    增加IO线程数,提高读写能力,根据机器的处理器来设置

    • innodb_io_capacity = 500

    提高刷新脏页数量和合并插入数量,改善磁盘I/O处理能力,默认200

    以上参数修改都是通过减少对磁盘的IO操作来实现的,包括关闭了MySQL默认的事务存储到磁盘的操作,增大缓冲区的容量,这样子容易造成MySQL服务器宕机的时候,数据大量丢失,建议不要在生产环境下修改这些配置,根据实际情况修改

    扫码关注我的微信公众号:Java架构师进阶编程  获取最新面试题,电子书

    专注分享Java技术干货,包括JVM、SpringBoot、SpringCloud、数据库、架构设计、面试题、电子书等,期待你的关注!

    展开全文
  • 正常在开发过程中可以借助例如JAVA语言中框架已经封装好的方法达成批量插入数据的目的,这里主要是记录直接用sql语句实现,提供一个基础思路: 1、目前有一张user表结构如下: 2、实现批量刷入测试数据: ...

    想要测试不同结构的sql引擎和性能之间的区别,故此需要录入大量测试数据,并且不可能手动录入。

    正常在开发过程中可以借助例如JAVA语言中框架已经封装好的方法达成批量插入数据的目的,这里主要是记录直接用sql语句实现,提供一个基础思路:
    1、目前有一张user表结构如下:

    2、 实现批量刷入测试数据:

    TRUNCATE TABLE user; #注意!!!这里会清空表数据,如果不想清空请删除
    DROP PROCEDURE IF EXISTS insert_data; #如果存在此存储过程则删掉
    DELIMITER $ -- 使用delimiter后,将不把分号当做语句结束,会将该段整个提交
    CREATE PROCEDURE insert_data()
    BEGIN
        DECLARE i INT DEFAULT 1;
    		SET @valuesSql = " ";
           WHILE i< 101 DO
           SET @sqlString = CONCAT("('",i,"','",CONCAT("测试",i),"','",10,"','",0,"')");
    			 IF(i < 100) THEN
    			 SET @valuesSql = CONCAT(@valuesSql,@sqlString,",");
    			 ELSE
    			 SET @valuesSql = CONCAT(@valuesSql,@sqlString);
    			 END IF;
           SET i = i+1;
        END WHILE;
    		SET @exesql = CONCAT("insert into test.`user` (id,userName,age,sex) VALUES ",@valuesSql);
    		#SELECT @exesql;  打印sql,如果太长不建议打印
    		PREPARE stmt FROM @exesql;
    		EXECUTE stmt;
    		DEALLOCATE PREPARE stmt;
        END 
    

    3、运行完成后调用存储过程

    CALL insert_data();

    4、查询结果

     完成!

    原理很简单:利用循环语句和concat连接字符串,最后完成sql语句组合。再使用:

    PREPARE stmt FROM @exesql; //准备sql语句

    EXECUTE stmt;  //执行

    DEALLOCATE PREPARE stmt;  //释放

    即可

    展开全文
  • MySQL存储过程实现插入数据

    千次阅读 2021-03-02 09:11:10
    存储过程实现插入数据: DROP PROCEDURE IF EXISTS usp_generate_order_data; DELIMITER // CREATE PROCEDURE usp_generate_order_data() BEGIN DROP TABLE IF EXISTS tmp_sales_order; CREATE TABLE tmp_sales_...

    有一张空白表:

    CREATE TABLE sales_order
    (
       order_number         INT(11) NOT NULL AUTO_INCREMENT,
       customer_number      INT(11) NOT NULL,
       product_code         INT(11) NOT NULL,
       order_date           DATETIME NOT NULL,
       entry_date           DATETIME NOT NULL,
       order_amount         DECIMAL(18,2) NOT NULL,
       PRIMARY KEY (order_number)
    );
    

    存储过程实现插入数据:

    DROP PROCEDURE  IF EXISTS usp_generate_order_data;
    DELIMITER //
    CREATE PROCEDURE usp_generate_order_data()
    BEGIN
    
    	DROP TABLE IF EXISTS tmp_sales_order;
    	CREATE TABLE tmp_sales_order AS SELECT * FROM sales_order WHERE 1=0;
    	SET @start_date := UNIX_TIMESTAMP('2018-1-1');
    	SET @end_date := UNIX_TIMESTAMP('2018-11-23');
    	SET @i := 1;
    	WHILE @i<=10000 DO
    		SET @customer_number := FLOOR(1+RAND()*6);
    		SET @product_code := FLOOR(1+RAND()* 3);
    		SET @order_date := FROM_UNIXTIME(@start_date+RAND()*(@end_date-@start_date));
    		SET @amount := FLOOR(1000+RAND()*9000);
    		INSERT INTO tmp_sales_order VALUES (@i,@customer_number,@product_code,@order_date,@order_date,@amount);
    		SET @i := @i +1;
    	END WHILE;
    	TRUNCATE TABLE sales_order;
    	INSERT INTO sales_order
    	SELECT NULL,customer_number,product_code,order_date,entry_date,order_amount
    	FROM tmp_sales_order;
    	COMMIT;
    	DROP TABLE tmp_sales_order;
    END //
    
    CALL usp_generate_order_data();
    
    

    解释:

    //where 1=0 只复制表结构
    CREATE TABLE tmp_sales_order AS SELECT * FROM sales_order WHERE 1=0;
    
    展开全文
  • MySQL使用存储过程批量插入数据

    千次阅读 2018-08-25 18:08:24
    -------------MySQL批量插入测试数据----------------------- CREATE TABLE `students_table` ( --定义测试表  `id` bigint(20) NOT NULL AUTO_INCREMENT,  `name` varchar(255) DEFAULT NULL,  `age` tinyint(4)...
  • MySQL利用存储过程批量插入数据

    千次阅读 2021-08-19 09:23:48
    因最近想要测试一下MySQL百万级数据处理过程,所以要一次对数据库插入大量数据。 具体存储过程如下: delimiter $$$ create procedure inserttest() begin declare i int default 0; set i=0; start transaction; ...
  • Mysql批量插入数据
  • MySQL 使用存储过程插入千万数据

    千次阅读 2018-09-04 18:04:29
    我从公司服务器上导出了一张中间表,字段不多,数据量960w多点,用作平时练手,不过随着使用的深入,发现这点数据量已经不能满足我的需要了,决定动手写个存储过程人工增加点数据量,废话不多说了,看图,这时导出时...
  • mysql采用存储过程插入大批量数据

    千次阅读 2018-12-08 18:08:12
    最近发现老项目中的首页加载速度较慢,发现做主要的原因由于单表数据已经超过百万了,于是考虑通过优化SQL语句和增加索引来提升加载速度。线上库当然不能随意的增加和修改索引测试,但是测试库的数据量较少,测试...
  • mysql存储过程案例(插入100条数据)

    万次阅读 2017-11-26 17:23:26
    MySQL存储过程 1:概述 1:是一种用来处理数据的方式,存储过程是一种没有返回值的函数 2:存储过程和函数是事先经过编译并存储在数据库的一段SQL语句的集合,调用存储过程和函数可以简化开发人员的许多工作,...
  • mysql循环插入数据存储过程

    千次阅读 2018-05-03 08:50:39
    以前在做统计的分析的时候,...数据库:mysql 工具:Navicat 表根据需求来。 这里模拟一张。 CREATE TABLE `hack_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `boke` varchar(255) DEFAULT NULL COMMEN...
  • -- MySQL测试任务:使用存储过程,往表中插入千万级数据,根据索引优化速度 -- 1.使用索引查询 -- 2.不使用索引查 -- 3.比较两者查询速度的差异 -- 1.创建索引测试表 DROP TABLE IF EXISTS index_test; CREATE ...
  • mysql 存储过程 查询结果循环插入

    千次阅读 2022-01-24 11:59:38
    DELIMITER // CREATE PROCEDURE _inertDepartment_corpid() #这个是存储过程名称 随便起; BEGIN ##定义从A表里面取的值;这个是单条记录的corpid的值 DECLARE _corpid varchar(50); #需要插入表内存在同样值...
  • 简单存储过程创建、编写、调用。
  • 需求:批量插入上万条数据,要求created_at(创建时间)为依次递增的数据,其他字段不做限制实现上述需求,可以通过文件的形式或者创建存储过程的方式实现,小编今天就以写一个简单的存储过程来实现该需求:步骤一:表...
  • mysql使用存储过程插入记录并返回自增id踩坑(由于...mysql插入数据后返回自增ID的方法. 2. 出问题的存储过程 CREATE PROCEDURE `proc_test`(IN tname VARCHAR(255),IN tpwd VARCHAR(255),OUT reid INT) BEGIN INSER...
  • DROP PROCEDURE IF EXISTS insertDaKa; create procedure insertDaKa(OUT result datetime)begin DECLARE i int;  DECLARE EDate datetime default '2018-07-07'; DECLARE ETime datetime;...
  • Mysql 动态插入数据,储存过程

    千次阅读 2018-09-15 11:32:11
    -- mysql动态批量插入数据,储存过程 -- 如果存在此存储过程则删掉 DROP PROCEDURE IF EXISTS proc_initData; DELIMITER $ CREATE PROCEDURE proc_initData() BEGIN DECLARE i INT DEFAULT 1; DECLARE id INT ...
  • MySql 存储过程 临时表 无法插入数据

    千次阅读 2017-01-11 12:26:26
    今天在写存储过程的时候,发现一个问题就是,sql明明能查出数据,为啥无法插入到临时表、实体表呢? 存储过程截取如下:BEGIN /******************************** **作者:jiankunking **功能:demo **日期:...
  • MySQL通过函数存储过程批量插入

    千次阅读 2022-01-17 14:53:58
    在日常开发过程中有些场景需要批量造数进行测试,本文就是通过MySql数据库函数与存储过程实现批量插入数据,当然也可以通过代码循环插入数据,亦或是通过其他工具实现,这里要实现的是直接操作数据库,通过测试发现...
  • 说明:分数表本应该引用课程id(course_id)作为外键,此处重点在于练习mysql存储过程,为了能够直观的看到结果,所以此处使用课程名称作为分数表的列,也没有创建课程表(备注:测试数据只需保证课程名称不重复...
  • mysql存储过程批量插入数据

    千次阅读 2018-03-20 19:05:32
    mysql存储过程批量插入数据百万,千万数据 DROP PROCEDURE IF EXISTS pro_test1_insert; DELIMITER // CREATE PROCEDURE pro_test1_insert(cnt int) BEGIN DECLARE i int DEFAULT 0; START TRANSACTION; WHILE i ...
  • mysql,procedure,insert
  • 需求说明:需要从表 role_permission...*** 这里采用mysql存储过程( ~~~ 虽然写程序比较快一些) DELIMITER $$ USE `test`$$ DROP PROCEDURE IF EXISTS `call_1`$$ CREATE DEFINER = `root` @`localhost` PROC...
  • 使用 MySQL 循环插入N条(如100条)数据,我们可以定义一个存储过程,然后调用即可。 1、先创建一张数据库表 t_user 用户表: drop table if exists t_user; CREATE TABLE `t_user` ( `id` int(11) NOT NULL ...
  • 这个是用mysql写的存储过程,搭配里面一张数据表使用,达到高并发情况下获得唯一订单号的目的;原理:按照一定规则生成订单号后,把订单号插入数据表后,再返回给用户,由于数据表设置了主键,也就是当数据表中存在...
  • MYSQL存储过程循环遍历插入数据

    千次阅读 2017-08-07 14:15:54
    本示例通过 while...end while 循环控制游标来实现插入表记录。 DROP PROCEDURE IF exists pro_initCategoryForTradingEntity; create procedure pro_initCategoryForTradingEntity(tradingEntityId int) begin ...
  • 我们先建一个简单的表,表里有 a、b 两个字段,并分别建上索引: CREATE TABLE `t` ( `id` int(11) NOT NULL, ...然后,我们往表 t 中插入 10 万行记录,取值按整数递增,即:(1, 1, 1),(2, 2, 2
  • 工作中使用Jmeter压测时,需要大数据量,可以使用MySQL创建函数和存储过程,批量插入大数据 右击新建函数,创建过程 完成后自动创建 在body部分写入过程: DECLARE id INT DEFAULT 100000; -- 声明 默认开始...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 277,030
精华内容 110,812
关键字:

mysql存储过程插入数据

mysql 订阅