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`;