在数据库中使用存储过程插入单组/多组数据

发布于:2024-05-18 ⋅ 阅读:(132) ⋅ 点赞:(0)

存储过程可以插入单组数据,也可以以字符串的形式插入多组数据,将字符串中的信息拆分成插入的数据。

首先建立一个简单的数据库

create database student;
use student;

选中数据库之后建立一张学生表

create table stu(
		uid int primary key,
		uname varchar(20),
		department varchar(20)
);

**首先建立一个存储单组数据的存储过程

CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_stu`(
	IN `id` int,
	IN `name` varchar(20),
	IN `department` varchar(20))
BEGIN
	declare cnt int;
	select count(*) into cnt from stu where stu.uid = id;
	if cnt = 0 then insert into stu(uid,uname,department) values(id,name,department);
	end if;
END

注意,这里的cnt并不是无用变量,cnt用来判断将要插入的主键在表中是否已经存在。

调用该存储过程

call insert_stu(1,'小蓝','项管部');

在这里插入图片描述

[!NOTE]

注意:调用存储过程使用call,调用函数使用select.

建立一个插入多组数据的存储过程

CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_stu_multipe`(IN stustr varchar(2000))
BEGIN
	#Routine body goes here...
	declare str varchar(200);
	declare uid int;
	declare uname varchar(20);
	declare department varchar(20);
	
	while stustr > '' do
		set str = mid(stustr,1,locate(';',stustr)-1);
		set uid = cast(mid(str,1,locate(',',str) - 1) as signed);
		set str = mid(str,locate(',',str) + 1);
		set uname = mid(str,1,locate(',',str) - 1);
		set department = mid(str,locate(',',str) + 1);
		call insert_stu(uid,uname,department);
		set stustr = mid(stustr,locate(';',stustr) + 1);
	end while;
END

[!IMPORTANT]

1、函数mid(column_name,start[,length]) 从文本段中提取字符。文本名column_name,开始位置为start,长度为length(如果长度省略,默认截取到最后一位字符)

2、LOCATE() 函数在字符串中快速搜索子字符串,并返回其位置。如果在原始字符串中找不到子字符串,则此函数返回0,此函数执行不区分大小写。

3、CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型。

4、可以在该存储过程中调用存储过程insert_stu,减少代码量。

调用该存储过程

call insert_stu_multipe('2,小明,项管部;3,小刚,外务部;4,小红,社会实践部;');

在这里插入图片描述

查看最终结果
在这里插入图片描述