当前位置: 首页 > news >正文

一个比脚本造数据更快的方式-存储过程

存储过程造数据主要有以下几个优势:

1.批量高效

一次性插入大量数据,比逐条执行INSERT快得多。比如造 10 万条测试数据,用存储过程几秒就完成,手写 SQL 几乎不可能。

2.逻辑可复用

一次创建,多次调用:

CALLgenerate_test_bonds(100);-- 造 100 条CALLgenerate_test_bonds(10000);-- 造 1 万条

3.数据可控

可以灵活控制数据量和数据模式,比如模拟真实场景:

  • 少量数据测功能正确性
  • 大量数据测性能、索引优化、分页查询

4.SQL 运行在服务端

存储过程在 MySQL 服务器端执行,网络开销小,不会有大量 SQL 语句来回传输。


对比:

方式1 万条数据耗时灵活性
逐条INSERT慢,多次网络往返
存储过程快,服务端一次性执行高,传参控制
脚本语言(Python/Shell)中等最高

存储过程详解

什么是存储过程?

存储过程(Stored Procedure)是一组预编译的 SQL 语句集合,存储在数据库服务器上,通过一个名称调用执行。可以理解为"数据库里的函数"。


以你的代码为例逐行解析

DELIMITER// -- 1. 临时修改语句结束符为 //CREATEPROCEDUREgenerate_test_bonds(INnumINT)-- 2. 创建存储过程,接收一个输入参数BEGIN-- 3. 过程体开始DECLAREiINTDEFAULT1;-- 4. 声明局部变量 i,初始值 1WHILEi<=numDO-- 5. 循环条件:i <= 传入的参数INSERTINTObond_info(bond_code,bond_name,price,status)VALUES(CONCAT('BOND',LPAD(i,6,'0')),-- 生成 BOND000001 格式的代码CONCAT('测试债券',i),-- 生成"测试债券1"格式的名称ROUND(RAND()*100,2),-- 随机生成 0~100 的价格,保留2位小数'ACTIVE');-- 固定状态值SETi=i+1;-- 6. 计数器 +1ENDWHILE;-- 7. 循环结束END// -- 8. 过程体结束DELIMITER;-- 9. 恢复语句结束符为 ;

语法说明

1.DELIMITER— 为什么需要它?

默认情况下 MySQL 用;作为语句结束符。但存储过程内部包含多条;结尾的语句,如果不改分隔符,MySQL 遇到第一个;就认为结束了。

DELIMITER // ← 告诉 MySQL:现在用 // 当作结束符 ...存储过程内容(里面可以正常用 ;)... END // ← 这里才真正结束 DELIMITER ; ← 恢复默认
2. 参数类型
类型含义示例
IN输入参数,调用时传入IN num INT
OUT输出参数,过程内赋值,调用后取出OUT total INT
INOUT输入输出兼顾INOUT val INT
3. 变量
DECLAREiINTDEFAULT1;-- 声明 + 默认值SETi=i+1;-- 赋值SELECTCOUNT(*)INTOiFROMbond_info;-- 查询结果赋给变量
4. 流程控制
-- 条件判断IF条件THEN...ELSEIF条件THEN...ELSE...ENDIF;-- 循环WHILE条件DO...ENDWHILE;REPEAT...UNTIL 条件ENDREPEAT;

完整生命周期

创建 → 调用 → 查看 → 删除 CREATE PROCEDURE xxx() ... -- 创建 CALL xxx(); -- 调用 SHOW CREATE PROCEDURE xxx; -- 查看定义 DROP PROCEDURE IF EXISTS xxx; -- 删除

优缺点

优点缺点
预编译,执行快调试困难
减少网络传输移植性差(不同数据库语法不同)
逻辑封装,复用方便版本管理不方便
安全性高(权限控制)复杂业务逻辑不适合全放数据库

总之:造测试数据用存储过程是最省事、最高效的方式。

http://www.jsqmd.com/news/1161918/

相关文章:

  • sbt-android测试攻略:单元测试、UI测试与持续集成实践
  • 爱彼万国名表高价变现:北京合扬深耕奢品回收头部阵营,让闲置腕表焕发新生 - 奢侈品交易观察员
  • 前端小白看过来:收藏这3步,30天轻松入门AI开发!
  • 思源宋体TTF:5分钟掌握专业级中文免费字体应用
  • 2026朝阳本地认可 5 家环境现状监测环评检测机构实地测评汇总 废气废水 + 土壤噪声 + 竣工验收监测 附电话地址 - 中检检测集团
  • 从代码到图形:科学可视化艺术的革命性实践
  • 5分钟掌握B站视频转换:m4s-converter工具完整使用指南
  • 一个电磁阀电路接线故障,整条产线停摆?这款状态监测模块让“被动抢修”变成“先知先觉”
  • STM32上下拉电阻配置与信号稳定性优化实践
  • 如何为OpenWrt打造现代化管理界面:luci-theme-argon主题完全指南
  • 手持式雷达测速仪:不限道路厂区,可设置限速阈值实时监测车辆速度
  • 南宁人别亏!腋下热门包回收价差上千?逸程正规统一行情报价,绝不到手压价 - 全城热点
  • 3D点云标注革命:SUSTechPOINTS如何让自动驾驶数据标注效率提升300%
  • 2026保山本地认可 5 家建筑建材检测机构实地测评汇总 TOP5 钢筋水泥 + 混凝土砂石 + 保温防水材料检测 附电话地址 - 科信检测
  • 创客匠人:知识付费进入“工具、服务、AI”三重体系时代
  • 无锡做欧米茄回收十年,曝光商家压价核心手段 - 全城热点
  • 5分钟搞定Mac Boot Camp驱动难题:Brigadier自动化工具终极指南
  • League Akari助手:英雄联盟玩家的智能游戏伴侣终极指南
  • ubuntu系统常用指令及ros学习笔记
  • Ohook:重新定义Office订阅版免费使用的智能解决方案
  • 工控安全與物聯網資安:TW-Security-and-CTF-Resource中的特殊領域學習指南
  • 树莓派变身专业USB摄像头:5分钟快速部署终极指南
  • Ollama Open WebUI性能翻倍实测:通过NGINX缓存层+Redis会话管理+模型lazy-load机制,QPS提升3.8倍(附压测数据对比表)
  • Winbindex 终极指南:快速查找和下载 Windows 二进制文件的完整教程
  • 无锡滨湖区黄金回收实地测评|三大本土连锁门店全点位整理,滨湖居民卖金避坑完整版指南 - 铂衡汇黄金珠宝
  • Raveberry高级功能:蓝牙音频、HiFiBerry和USB声卡配置
  • 2026年亚马逊跨境电商侵权链接申诉服务商推荐与专业选型分析报告 - 行业观察网
  • 2026鞍山本地认可 5 家土壤检测机构实地测评汇总 TOP5 重金属 + 养分 pH + 污染风险监测 附电话地址 - 中安检测集团
  • 为什么你的Open WebUI总报“Connection refused”?Ollama服务绑定、端口冲突、SELinux策略三大隐性故障根因分析
  • 计算机毕业设计之汽车配件生产计划管理系统