mysql 存储过程
什么是存储过程,如何创建一个存储过程
SQL 的存储过程是对 SQL 代码进行封装,可以反复利用。优点是清晰、安全,减少网络传输量。
- 先创建一张表
CREATE TABLE `userinfo` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`u_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名',
`u_password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密码',
`skills` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '技能',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
- 使用存储过程插入数据
CREATE PROCEDURE 存储过程名称([参数列表])
BEGIN
需要执行的语句
END
delimiter // # 来临时定义新的结束符,mysql 默认是 (;),这里用(//) 替换
create procedure `add_data`(in name varchar(50), in skills varchar(50))
BEGIN
declare i int; # 声明变量
set i=1; # 设置变量
while i<=20000 do
insert into `userinfo`(u_name,u_password,skills) values(name,'000000',skills);
set i=i+1;
end while;
END // # 在整个存储过程结束后采用了(//)作为结束符号,告诉 SQL 可以执行了
delimiter ; # 将结束符还原成默认的(;)
- 调用
call add_data('张三','大威天龙');
- 查询
delimiter //
create procedure `get_people`(in skill varchar(50),out total varchar(50))
begin
select count(*) from userinfo where skills = skill into total;
end //
delimiter ;
call get_people('大威天龙', @total);
select @total;
- 删除已经创建的存储过程
drop procedure 存储过程名称