MySQL学习记录(11)

学习内容:存储过程的创建与应用


一、了解存储过程

存储过程是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。

存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户通过指定存储过程的名字并给定参数(需要时)可以直接执行存储过程。

存储过程中可包含逻辑控制语句和数据操纵语句。

二、创建存储过程

语法格式

CREATE PROCEDURE sp_name ( [proc_parameter] )
[characteristics ···] routine_body
  • CREATE PROCEDURE:创建存储过程的关键字。
  • sp_name:存储过程的名字。
  • proc_parameter:指定存储过程的参数列表。
    其列表形式如下[IN|OUT|INOUT] param_name type
    param_name表示参数名称。
  • characteristics:存储过程的特性
  • routine_body:是SQL语句的内容。可以用BEGIN···END来表示开始和结束。

存储过程的特性有以下取值:
(1)LANGUAGE SQL:说明 routine_body部分是由SQL语句组成的,SQL是LANGUAGE特性的唯一值。
(2) [NOT] DETERMINISTIC:指明存储过程执行的结果是否是正确的。
DETERMINISTIC表示结果是确定的,每次执行存储过程时,相同的输入会得到相同的输出;NOT DETERMINISTIC表示结果是不确定的,相同输入可能得到不同输出。
若未指定,默认为NOT DETERMINISTIC。
(3){ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }:指明子程序使用SQL语句的限制。
CONTAINS SQL:包含SQL,但不包含读写。
NO SQL:不包含SQL。
READS SQL DATA:包含读数据的语句。
MODIFIES SQL DATA :包含写数据的语句。
默认为 CONTAINS SQL 。
(4)SQL SECURITY { DEFINER | INVOKER }:指明谁有权限来执行。
DEFINER:只有定义者能执行。
INVOKER:拥有权限的调用者可以执行。
默认为DEFINER。
(5)COMMENT ‘string’:注释信息,可以用来描述存储过程或函数。

创建不带参数的存储

DELIMITER //
CREATE PROCEDURE Proc_student();
BEGIN 
SELECT *FROM student;
END //

创建带参数的存储

DELIMITER //
CREATE PROCEDURE Proc_stu_01(aa INT);
BEGIN
SELECT *FROM student WHERE 学号=aa;
END //

三、调用存储过程

CALL sp_name( [parameter,···])

四、修改存储过程

ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ···]

五、删除存储过程

DROP PROCEDURE sp_name;

六、查看存储过程

1.使用SHOW PROCEDURE STATUS 语句
返回存储过程的特征,如所属数据库、名称、类型、创建者、创建和修改日期。LIKE语句表示匹配存储过程的名称。

SHOW PROCEDURE STATUS [LIKE 'pattern']

2.使用SHOW CREATE PROCEDURE 语句
可查询存储过程具体定义。

SHOW CREATE PROCEDURE sp_name

3.通过INFORMATION_SCHEMA.ROUTINES 查看

SELECT * FROM information_schema.Routines
WHERE ROUTINE_NAME='sp_name';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值