mysql存储过程和函数、流程控制结构

目录

存储过程和函数

存储过程

一、创建语法

二、调用语法

三、删除存储过程

四、查看存储过程的信息

函数

一、创建语法

二、调用语法

三、查看函数

四、删除函数

流程控制结构

一、分支结构

二、循环结构(用在begin end中)


 


存储过程和函数

存储过程和函数:类似于java中的方法

好处:1、提高代码的重用性

2、简化操作

存储过程

含义:一组预先编译好的sql语句的集合,理解成批处理语句

1、提高了代码的重用性

2、简化操作

3、减少了编译次数并减少了和数据库服务器的连接次数,提高了效率(第一次编译后,第二次会检查是否被编译过,若被编译过则直接调用)

一、创建语法

CREATE PROCEDURE 存储过程名(参数列表)

BEGIN

存储过程体(一组合法的SQL语句)

END

注意

1、参数列表包含三部分

参数模式 参数名 参数类型

举例 IN stuname VARCHAR(20)

参数模式:

IN:该参数可以作为输入,也就是调用方需要传入值

OUT:该参数可以作为输出,也就是作为返回值

INOUT:该参数既可以作为输入又可以作为输出

2、如果存储过程仅仅只有一句话,BEGIN END可以省略

存储过程体中每条SQL语句的结尾必须加分号。

存储过程的结尾可以使用DELIMITER重新设置

DELIMITER 结束标记

例如 DELIMITER $ 也就是$=;

补充说明:

DELIMITER是分割符的意思,因为MySQL默认以”;”为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将”;”当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。

一个例子:

DELIMITER $ //选择分界符

CREATE PROCEDURE test_pro3(IN birth1 DATETIME,IN birth2 DATETIME,OUT result INT)

BEGIN

SELECT DATEDIFF(birth1,birth2) INTO result;

END $

二、调用语法

CALL 存储过程名(实参列表);

三、删除存储过程

语法:DROP PROCEDURE 存储过程名

四、查看存储过程的信息

SHOW CREATE PROCEDURE 存储过程名

函数

与存储过程的区别:有且仅有一个返回,适合做处理数据后返回一个结果

一、创建语法

CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型

BEGIN

函数体

END

注意:

1、参数列表 包含两部分

参数名 参数类型

2、函数体肯定会有RETURN语句,没有会报错

RETURN不放在最后也不会报错,但不建议

RETUNRN 值;

3、函数体中仅有一句话,则可以省略BEGIN END

4、使用DELIMITER语句设置结束标记

注意:若提示1418错误代码则输入

SET GLOBAL log_bin_trust_function_creators=TRUE;

信任子程序创建。

也可以这函数声明后加DETERMINISTIC

一个例子:

CREATE FUNCTION myf1() RETURNS INT

BEGIN

DECLARE c INT DEFAULT 0;

SELECT COUNT(*) INTO c

FROM employees;

RETURN c;

END $

二、调用语法

SELECT 函数名(参数列表);

三、查看函数

SHOW CREATE FUNCTION 函数名;

四、删除函数

DROP FUNCTION 函数名;

函数和存储过程都可以在mysql库中查到

流程控制结构

分类:

顺序结构:程序从上往下依次执行

分支结构:程序从两条或多条路径中选择一条去执行

循环结构:程序在满足一定条件的基础上,重复执行一段代码

一、分支结构

1、if函数 //前面学过

功能:实现简单的双分支

语法:

IF(表达式1,表达式2,表达式3)

执行顺序:

如果表达式1成立则返回2否则返回3

应用:在任何地方

2、case结构 //前面学过

情况1:类似于switch,一般用于等值判断

语法:

CASE 变量|表达式|字段

WHEN要判断的值 THEN 返回的值1或语句1

WHEN要判断的值 THEN 返回的值2或语句2

… ELSE 要返回的值n或语句n

END CASE;

情况2:类似多重IF,一般用于实现区间判断

语法:

CASE

WHEN要判断的条件1 THEN 返回的值1或语句1

WHEN要判断的条件2 THEN 返回的值2或语句2

… ELSE 要返回的值n或语句n

END CASE;

注意:若返回的是语句则每条独立的语句后要加上;

特点:

可以作为表达式,嵌套在其他语句中,可以放在任何地方,BEGIN END 中或外面

可以作为独立的语句去使用,只能放在BEGIN END中

如果满足WHEN则执行THEN后面的语句,并结束CASE

如果都不满足则执行ELSE

ELSE可以省略,但WHEN都不满足则返回NULL

3、if结构

功能:实现多重分支

语法:

IF 条件1 THEN 语句1;

ELSEIF 条件2 THEN 语句2;

【ELSE 语句n;】

END IF;

应用在BEGIN END中

二、循环结构(用在begin end中)

分类:

while、loop、repeat

循环控制(跳转语句):

iterate类似于continue

leave类似于break //用法:leave 标签;

1、WHILE

语法:

【标签:】WHILE 循环条件 DO

循环体;

END WHILE 【标签】; //标签也就是取名字

2、loop

【标签:】loop

循环体;

end loop【标签】;

可以用来模拟简单的死循环

3、repeat

语法:

【标签:】repeat

循环体;

until 结束循环的条件

end repeat【标签】;

若写出死循环可以使用以下办法:

显示所有线程

SHOW PROCESSLIST;

杀掉对应线程id KILL 线程id;

一个while的例子

CREATE PROCEDURE pro_while1(IN insertCount INT)

BEGIN

DECLARE i INT DEFAULT 1;

WHILE i<=insertCount DO

INSERT INTO admin(username,password)VALUES(CONCAT(‘Rose’,i),’666′);

SET i=i+1;

END WHILE;END$

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值