MySQL数据库--存储过程

本文介绍了存储过程的概述,包括其作为SQL语句集合的特性,以及存储过程在增强SQL功能、数据安全、性能提升和简化SQL使用等方面的优势。通过实例展示了如何创建、调用和查看存储过程,包括创建存储过程p_student、pro_select和pro_insert/pro_out的实战应用。
摘要由CSDN通过智能技术生成

一.存储过程的概述

        存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

二。存储过程的优点

①存储过程的能力大大增强了SQL语言的功能和灵活性。

        存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

②可保证数据的安全性和完整性。

③运行速度快

        存储过程因为SQL语句已经预编绎过了,因此运行的速度比较快。在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。由于执行SQL语句的大部分工作已经完成,所以存储过程能以极快的速度执行。

④简化SQL语言

        可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。

⑤存储过程主要是在服务器上运行,减少对客户机的压力。 可以降低网络的通信量。

三.语法结构

四.案例实战

# 1.创建存储过程 p_student,从student表中检索出所有电话以135开头的学生的学号、姓名、出生日期和电话等信息。
-- 删除存储过程 p_student
drop
    procedure if exists p_student;

-- 创建存储过程 p_student
create
    procedure p_student()
begin
select
    S_no 学号,
    S_name 姓名,
    S_bir 出生日期,
    phone 电话
from
    student
where
    phone like '135%';
end;

-- 调用存储过程 p_student
call p_student;

# 2.创建存储过程pro_select(),用指定的学号和课程号为参数查询学生成绩,输出参数为学生平时成绩和结业成绩。
-- 查看score表结构
desc
    score;

-- 删除存储过程pro_select()
drop
    procedure if exists pro_select;

-- 创建存储过程pro_select()
create
    procedure pro_select(
        in sno bigint,
        in cno char(13),
        out d_sc float,
        out f_sc float
    )
begin
select
    daily , final into d_sc , f_sc
from
    score
where
    S_no = sno
    and C_no = cno;
select
    @d_sc 平时成绩,
    @f_sc 结业成绩;
end;

-- 调用存储过程pro_select()
call pro_select(18122221320, 'a01564', @d_sc, @f_sc);

# 3.创建一个存储过程 pro_insert(),向 score表中插入一行记录,然后创建另一存储过程pro_out(),调用存储过程pro_insert(),并查询输出score表中插入的记录。
-- 删除存储过程 pro_insert()
drop
    procedure if exists pro_insert;

-- 创建存储过程 pro_insert()
create
    procedure pro_insert(
        in sno bigint,
        in cno char(13),
        in dscore float,
        in fscore float
    )
begin
insert into
    score
values
    (sno, cno, dscore, fscore);
end;

-- 删除存储过程pro_out()
drop
    procedure if exists pro_out;

-- 创建存储过程pro_out()
create
    procedure pro_out(
        in sno bigint,
        in cno char(13),
        in dscore float,
        in fscore float
    )
begin
    call pro_insert(sno, cno, dscore, fscore);
select
    *
from
    score
where
    S_no = sno
    and C_no = cno;
end;

-- 调用存储过程pro_out()
call pro_out(18122221329, 'C05103', 89, 97);

# 4.查看p_student存储过程的定义。
show
create
    procedure p_student;

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄天宇kiki

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值