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