我是靠谱客的博主 瘦瘦发夹,最近开发中收集的这篇文章主要介绍MySQL中的存储过程、变量、条件语句、循环语句,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

存储过程

1、什么是存储过程

​ 是数据库一个重要的功能,是为了以后使用保存一条或者多条MySQL语句的集合。

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

2、为什么使用存储过程

​ a. 把处理封装在容易使用的单元中,简化操作

​ b. 防止错误 保证了数据一致性

​ c. 简化对变动的管理(修改对应的表名、列名等 修改对应存储过程的代码,对于使用的人不需要知道变化)

​ d. 提高性能

​ e. 灵活

总结:简单 、安全、高性能

MySQL在5.0开始支持存储过程

存储过程的格式

-- 存储过程的语法结构
-- CREATE PROCEDURE 过程名称([过程的参数[....]]) [特性...] 过程体
-- DELIMTER
// //
DELIMTER; 分隔符
CREATE PROCEDURE showStudent(OUT stucount int)
BEGIN
SELECT COUNT(1) INTO stucount FROM student;
END
SET @stucount = 1;# 声明变量 需要以@开头
CALL showStudent(@stucount);# 执行存储过程
SELECT @stucount;# 查询结果

3、注意:

​ a、DELIMTER // 和// DELIMTER,这两句是分割符的意思,因为mysql默认以;为分割符,如我们没有声明分隔符(DELIMTER )那么编译器会把存储过程当做SQL语句来进行处理,则存储过程就报错了,所以要实现使用DELIMTER 关键字申明 当前字段分隔符,这样MySQL才会将 ‘;’ 当做存储过程中的代码。

​ b、存储过程根据需要可能会有 输入 输出,输入输出参数,这里就有一个输出参数stucount 类型是int类型的如果有多个参数需要 ‘,’隔开

​ c、过程体的开始与结束需要BEGIN和END

参数:

mysql存储过程共有三种参数的类型 - - - IN、OUT、INOUT

使用语法:

CREATE PROCEDURE 参数名称((IN、OUT、INOUT) 参数名称 数据类型)

IN :输入参数-表示改参数的值 必须在调用存储过程时指定,在存储过程中改参数的值不能被返回

-- IN参数的使用
CREATE PROCEDURE demo_in_par(in p_in INT)
BEGIN
SELECT p_in;
SET p_in=2;
SELECT p_in;
END;# 存储过程的创建
-- 执行 查看结果
SET @p_in=1;
CALL demo_in_par(@p_in)
SELECT @p_in # 查询变量的值 结果没有发生改变

OUT:输出参数-该值可在存储过程中内部被改变 ,并可以返回

-- OUT参数的使用
CREATE PROCEDURE demo_out_par(OUT p_out INT)
BEGIN
SELECT p_out;
SET p_out=2;
SELECT p_out;
END;# 存储过程的创建
-- 执行 查看结果
SET @p_out=1;
CALL demo_out_par(@p_out);
SELECT @p_out; # 查询变量的值 结果发生改变 

INOUT:输入输出参数-调用时指定,并且可以被改变和返回

-- INOUT参数的使用
CREATE PROCEDURE demo_inout_par(INOUT p_inout INT)
BEGIN
SELECT p_inout;
SET p_inout=2;
SELECT p_inout;
END;# 存储过程的创建
-- 执行 查看结果
SET @p_inout=1;
CALL demo_inout_par(@p_inout);
SELECT @p_inout; # 查询变量的值 结果发生改变 

变量的使用

-临时存储数据的单元

-- 声明变量 并赋值 
-- 方式一
SELECT 'HELLO WORLD' INTO @hello;
SELECT @hello;
-- 方式二
SET @hey = 'HELLO WORLD';
SELECT @hey;
-- 方式三
SET @number=1+2+3;
SELECT @number;
-- 变量应用于存储过程
CREATE PROCEDURE greetWorld()
SELECT CONCAT("HELLO","WORLD");# CONCAT(str1,str2)字符串拼接
SET @greeting='Hello';
CALL greetWorld();
CREATE TABLE tablel(
variable CHAR(10)
);
# 创建存储过程
CREATE PROCEDURE procl(in pararmeterl INT)
BEGIN
DECLARE variablel CHAR(10);
IF pararmeterl=17 THEN
SET variablel='birds';
ELSE
SET variablel='beasts';
END IF;
INSERT INTO tablel VALUE(variablel);
END;
SET @pararmeterl=17;
CALL procl(@pararmeterl);
SELECT * FROM tablel;# 测试
DROP PROCEDURE procl;# 删除存储过程
条件语句 if-then-else 的使用
CREATE PROCEDURE proc2(in pararmeter2 INT)
BEGIN
DECLARE var INT;
SET var=pararmeter2+1;
IF var=0 THEN
INSERT INTO tablel VALUES('var=0');
END IF;
IF pararmeter2=0 THEN
INSERT INTO tablel VALUES('par2=0');
ELSE
INSERT INTO tablel VALUES('par2!=0');
END IF;
END;
SET @pararmeter2=0;
CALL proc2(@pararmeter2);
SELECT * FROM tablel;# 测试
DROP PROCEDURE proc2;
case语句-用于多重的判断
CREATE PROCEDURE proc3(in pararmeter3 INT)
BEGIN
DECLARE var INT;
SET var = pararmeter3+1;
CASE var
WHEN 0 THEN INSERT INTO tablel VALUES('proc3=0');
WHEN 1 THEN INSERT INTO tablel VALUES('proc3=1');
ELSE INSERT INTO tablel VALUES('proc3==other');
END CASE;
END;
SET @pararmeter3=0;
CALL proc3(@pararmeter3);
SELECT * FROM tablel;# 测试
DROP PROCEDURE proc3;
循环语句
-- WHILE循环
CREATE PROCEDURE proc4(in pararmeter4 INT)
BEGIN
DECLARE var INT;
SET var = pararmeter4+1;
WHILE var<6 DO
INSERT INTO tablel VALUES(var);
SET var=var+1;# 改变循环条件的语句
END WHILE;
END;
SET @pararmeter4=0;
CALL proc4(@pararmeter4);
SELECT * FROM tablel;# 测试
DROP PROCEDURE proc4;

相比于while循环,repeat会先执行,在执行操作后检查结果

-- REPEAT循环
CREATE PROCEDURE proc5()
BEGIN
DECLARE var INT;
SET var = 10;
REPEAT
INSERT INTO tablel VALUES(var);
SET var=var+1;
UNTIL var>15
END REPEAT;
END;
CALL proc5();
SELECT * FROM tablel;# 测试
DROP PROCEDURE proc5;

LOOP 循环 不需要初始条件的循环,使用LEAVE离开循环

CREATE PROCEDURE proc6()
BEGIN
DECLARE var INT;
SET var = 15;
LOOP_LABLE:LOOP# 起名LOOP_LABLE
INSERT INTO tablel VALUES(var);
SET var=var+1;
IF var>=20 THEN
LEAVE LOOP_LABLE;# 结束循环
END IF;
END LOOP;
END;
CALL proc6();
SELECT * FROM tablel;# 测试
DROP PROCEDURE proc6;
  1. 利用存储过程给学生表添加一条数据
CREATE PROCEDURE insert_student(
in studentNo INT,
in loginPwd	VARCHAR(20),
in studentName VARCHAR(20),
in sex	char(2),
in gradeId int,
in phone VARCHAR(50),
in address varchar(50),
in bornDate varchar(20),
in email
varchar(20),
in identityCard
varchar(20),
in aaggee VARCHAR(10)
)
BEGIN
INSERT INTO `student` VALUES
(studentNo, loginPwd, studentName, sex, gradeId,
phone, address, bornDate, email, identityCard,aaggee);
END;
CALL insert_student(30014,'123','测试','男',1,
'13645556793','河南洛阳','1993-07-23',
'cs@163.com','222222222222','33');
SELECT * FROM student;
  1. 利用存储过程输出所有学生的姓名、年龄、电话
CREATE PROCEDURE output_all_student()
BEGIN
SELECT * FROM student;
END;
CALL output_all_student();
  1. 利用存储过程查询学生,通过编号、姓名
CREATE PROCEDURE output_student(in stuNo INT,in stuName VARCHAR(20))
BEGIN
SELECT * FROM student WHERE studentNo=stuNo
AND studentName LIKE CONCAT('%','stuName','%');
END;
CALL output_student(30012,'李');

最后

以上就是瘦瘦发夹为你收集整理的MySQL中的存储过程、变量、条件语句、循环语句的全部内容,希望文章能够帮你解决MySQL中的存储过程、变量、条件语句、循环语句所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部