MySql创建存储过程-批量添加数据

1、概述

MySQL 5.0 版本开始支持存储过程。

存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。

存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。

1.1 优点

  • 存储过程可封装,并隐藏复杂的商业逻辑。
  • 存储过程可以回传值,并可以接受参数。
  • 存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。
  • 存储过程可以用在数据检验,强制实行商业逻辑等。

1.2 缺点

  • 存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。
  • 存储过程的性能调校与撰写,受限于各种数据库系统。

2、存储过程的创建和调用

  • 存储过程就是具有名字的一段代码,用来完成一个特定的功能。
  • 创建的存储过程保存在数据库的数据字典中。

2.1 创建存储过程

CREATE [DEFINER = { user | CURRENT_USER }]  PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body proc_parameter: [ IN | OUT | INOUT ] param_name type characteristic: COMMENT 'string' | LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } routine_body:   Valid SQL routine statement [begin_label:] BEGIN   [statement_list]     …… END [end_label]

2.2 MYSQL 存储过程中的关键语法

2.2.1 声明语句结束符,可以自定义:

DELIMITER $$
或
DELIMITER //

2.2.2 声明存储过程:

CREATE PROCEDURE demo_in_parameter(IN p_in int) 

2.2.3 存储过程开始和结束符号:

BEGIN .... END 

2.2.4 变量赋值:

SET @p_in=1  

2.2.5 变量定义:

DECLARE l_int int unsigned default 4000000; 

2.2.6 创建mysql存储过程、存储函数:

create procedure 存储过程名(参数)

2.2.7 存储过程体:

create function 存储函数名(参数)

3、创建存储过程实例

3.1 创建表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for one_data
-- ----------------------------
DROP TABLE IF EXISTS `one_data`;
CREATE TABLE `one_data`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '名称',
  `sort_number` int(11) NULL DEFAULT NULL COMMENT '序号',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 472 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci COMMENT = '创建事件每秒添加一条数据' ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

 3.2 创建存储过程(批量插入数据)

-- 创建存储过程delimiter
-- 这里的delimiter后面一定要加一个空格不然会报错
create procedure doinsert()
begin
 declare i int;set i = 0;
while(i<=200) do
  INSERT INTO `one_data`( `name`, `sort_number`, `create_time`) VALUES (CONCAT('名称',i), i, NOW());
  set i = i+1;
end while;end;

3.3 调用存储过程

-- 调用存储过程
call doinsert();

3.4 查看批量插入的数据

SELECT * FROM `one_data`;

posted @ 2022-08-04 19:11  码奴生来只知道前进~  阅读(406)  评论(0编辑  收藏  举报