mysql插入十万条数据

sql语句

// 删除存储过程
DROP PROCEDURE
IF
	EXISTS bigData_insert;

DELIMITER //
CREATE PROCEDURE bigData_insert () BEGIN
	DECLARE
		counter INT DEFAULT 1;
	DECLARE
		batch_size INT DEFAULT 100;
	DECLARE
		insert_number INT DEFAULT 10;
	START TRANSACTION;
	WHILE
			counter <= 10000 DO
			-- 构建批量插入的数据
			
			SET @insert_values = '';
		
		SET @insert_counter = 1;
		WHILE
				@insert_counter <= insert_number DO
				
				SET @insert_values = CONCAT( @insert_values, " (REPLACE ( UUID(), '-', '' ),
					'3ab9063d8e2fd73a183c913899f7d7d7',
					NULL,
					'20',
					'DLCIBSL2402771-01',
					'a04ba74bda00f2565f7431c53d67ed4f',
					'SURLDUM',
					NULL,
					100.000000,
					100.000000,
					50.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					2.000000,
					'fc0683e7f3b0cbed29c0511654be2923',
					NULL,
					'0',
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					0.000000,
					'8421999000',
					NULL,
					NULL,
					NULL,
					NULL,
					'1',
					NULL,
					'admin',
					'2024-02-05 11:11:02',
					NULL,
					NULL,
					0,
					'd10c0d191741defa0a198c45530e01e7',
					'A02',
					'1',
					0.000000,
					0.000000,
					0.000000,
					'0',
					NULL,
					'1',
					NULL,
				NULL)," );
			
			SET @insert_counter = @insert_counter + 1;
			
		END WHILE;
		-- 删除最后一个逗号
		
		SET @insert_values = SUBSTRING( @insert_values, 1, LENGTH( @insert_values ) - 1 );
		-- 执行批量插入
		
		SET @insert_query = CONCAT( 'INSERT INTO wms_shou_huo_huo_wu_ming_xi (`id`,
			`shou_huo_dan_id`,
			`ru_ku_wei_tuo_huo_wu_id`,
			`ru_ku_shou_huo_ming_xi_hao`,
			`ru_ku_liu_shui`,
			`wu_liao_id`,
			`xing_hao`,
			`pi_ci_hao`,
			`ji_suan_shu_liang`,
			`pcs_shu_liang`,
			`xiang_shu`,
			`mao_zhong`,
			`jing_zhong`,
			`ti_ji`,
			`yi_zhuang_tuo_ji_suan_shu_liang`,
			`yi_zhuang_tuo_pcs_shu_liang`,
			`yi_zhuang_tuo_xiang_shu`,
			`yi_zhuang_tuo_mao_zhong`,
			`yi_zhuang_tuo_jing_zhong`,
			`yi_zhuang_tuo_ti_ji`,
			`yi_shang_jia_ji_suan_shu_liang`,
			`yi_shang_jia_pcs_shu_liang`,
			`yi_shang_jia_xiang_shu`,
			`yi_shang_jia_mao_zhong`,
			`yi_shang_jia_jing_zhong`,
			`yi_shang_jia_ti_ji`,
			`yi_pei_ji_suan_shu_liang`,
			`yi_pei_pcs_shu_liang`,
			`yi_pei_xiang_shu`,
			`yi_pei_mao_zhong`,
			`yi_pei_jing_zhong`,
			`yi_pei_ti_ji`,
			`yi_chu_ji_suan_shu_liang`,
			`yi_chu_pcs_shu_liang`,
			`yi_chu_xiang_shu`,
			`yi_chu_mao_zhong`,
			`yi_chu_jing_zhong`,
			`yi_chu_ti_ji`,
			`xiang_gui`,
			`pcs_bao_zhuang`,
			`xiang_bao_zhuang`,
			`bi_zhong`,
			`dan_jia`,
			`zong_e`,
			`chang`,
			`kuan`,
			`gao`,
			`hscode`,
			`ji_zhuang_xiang_xiang_hao`,
			`sheng_chan_ri_qi`,
			`you_xiao_qi`,
			`yuan_chang_di`,
			`huo_wu_zhuang_tai`,
			`huo_wu_bei_zhu`,
			`chuang_jian_ren`,
			`chuang_jian_shi_jian`,
			`xiu_gai_ren`,
			`xiu_gai_shi_jian`,
			`tenant_id`,
			`cang_ku`,
			`sys_org_code`,
			`tong_ji_fang_shi`,
			`pcs_mao_zhong`,
			`pcs_jing_zhong`,
			`pcs_ti_ji`,
			`zheng_ru_zheng_chu_biao_shi`,
			`xing_hao2`,
			`dong_jie_biao_zhi`,
			`dong_jie_ren`,
		`dong_jie_shi_jian` ) VALUES', @insert_values );
		PREPARE stmt 
		FROM
			@insert_query;
		EXECUTE stmt;
		DEALLOCATE PREPARE stmt;
		-- 每插入 @batch_size 条数据提交一次事务
		IF
			counter % batch_size = 0 THEN
				COMMIT;
			START TRANSACTION;
			
		END IF;
		
		SET counter = counter + 1;
		
	END WHILE;
	COMMIT;
	
END // 
DELIMITER;
CALL bigData_insert ();

DELIMITER 是一个用于指定自定义分隔符的 MySQL 命令。在默认情况下,MySQL 使用分号 (😉 作为语句的结束符。然而,在使用存储过程、函数、触发器等需要包含多个语句的情况下,如果不使用自定义的分隔符,MySQL 将会在第一个分号处终止整个语句。

为了解决这个问题,可以使用 DELIMITER 命令将分隔符更改为其他字符,例如 //。这样,MySQL 将会将 // 视为语句的结束符,而不是默认的分号。

在创建存储过程或其他多语句结构时,我们使用 DELIMITER 命令来定义自定义分隔符。在存储过程的示例中,我们使用 DELIMITER // 将分隔符更改为 //,这样 MySQL 就能够正确解析存储过程中的多个语句。

在存储过程的末尾,我们使用 DELIMITER ; 将分隔符改回默认的分号,以确保后续的 SQL 语句使用正确的结束符。

总结来说,DELIMITER 命令用于在 MySQL 中定义自定义分隔符,以处理多个语句的情况,如存储过程、函数、触发器等。

sql解释

在上述示例中,我们在存储过程中添加了事务处理逻辑。我们使用 START TRANSACTION 开始一个事务,并使用 COMMIT 提交事务。

在每次循环中,我们使用动态生成的 SQL 语句来构建批量插入的数据,每个insert语句可以插入insert_number 条。我们使用 @insert_values 变量来存储插入值的字符串,然后使用 CONCAT 函数构建插入语句。在构建完整的插入语句后,我们使用 PREPARE、EXECUTE 和 DEALLOCATE PREPARE 执行动态生成的插入语句。
每执行batch_size 次后提交一次事务。
插入的数据数 = insert_number * 10000 = 100000

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值