`

MySQL存储过程procedure

阅读更多
1. 存储过程
存储过程:就是为了以后的使用而保存的一条或者多条SQL语句的集合。

1. 创建无参存储过程
create procedure productpricing()
begin
    select avg(prod_price) as priceaverage from products;
end;

使用无参存储过程
call productpricing();

删除存储过程
drop procedure productpricing;

2. 创建含参存储过程
create procedure productpricing(
    out pl decimal(8, 2),
	out ph decimal(8, 2),
	out pa decimal(8, 2)
)
begin
    select min(prod_price) into pl from products;
	select max(prod_price) into ph from products;
	select avg(prod_price) into pa from products;
end;

指定含参存储过程变量名
call productpricing(@pricelow, @pricehigh, @priceaverage);
使用含参存储过程
select @priceaverage;
select @pricelow, @pricehigh, @priceaverage;

3. 创建含有in、out参数的存储过程
create procedure ordertotal(
    in onumber int,
	out ototal decimal(8,2)
)
begin
    select sum(item_price*quantity) from orderitems where order_num = onumber into ototal;
end;

指定含有in、out参数的存储过程变量名
call ordertotal(20005, @total);
使用含有in、out参数的存储过程
select @total;

4. 建立只能存储过程
1) 获得合计 2) 判断时候含税(0为假,1为真) 3) 返回合计
-- Name: ordertotal
-- Parameters: onumber = order number
--             taxable = 0 if not taxable, 1 if taxable
--             ototal = order total variable
create procedure ordertotal(
    in onumber int,
    in taxable boolean,
    out ototal decimal(8, 2)
) comment 'Obtain order total, optionally adding tax'
begin
    -- declare variable for total
    declare total decimal(8, 2);
    -- declare tax percentage
    declare taxrate int default 6;

    -- get the order total
    select sum(item_price*quantity) from orderitems where order_num = onumber into total;
	
    -- is this taxable?
    if taxable then
    -- yes, so add taxrate to the total
    select total+(total/100*taxrate) into total;
    end if;
    
    -- add finally, save to out variable
    select total into ototal;
end;

使用
call ordertotal(20005, 0, @total);
select @total;
call ordertotal(20005, 1, @total);
select @total;

5. 检查存储过程
show create procedure ordertotal;

列出所有存储过程
show procedure status;

查询单个存储过程详细信息
show procedure status like 'ordertotal';

1. MySQL命令行客户机的分隔符
    默认的MySQL语句分隔符为;。如果命令行使用程序要解释存储过程自身内的;字符,则它们不会成为存储过程的成分,这回使存储过程中的SQL出现句法错误。
    delimiter //告诉命令行使用程序使用//作为新句结束分隔符,在执行完存储过程后使用delimiter ;充值为默认。
    解决办法如下:
    delimiter //
    create procedure productpricing()
    begin
        select avg(prod_price) as priceaverage from products;
    end //
    delimiter ;
2. 所有MySQL变量都必须以@开始
3. MySQL注释使用--
4. 使用存储过程的好处
    1) 通过把处理封装在容易使用的单元中,简化复杂的操作;
    2) 由于不要求反复建立一系列处理步骤,这保证了数据的完整性。如果所有开发人员和应用程序都使用同一(试验和测试)存储过程,则所使用的代码都是相同的。这一点延伸就是防止错误,需要执行的步骤越多,出错的可能性就越大。防止错误保证了数据的一致性;
    3) 简化对变动的关联。如果表名,列名或业务逻辑(或别的内容)有变化,只需要更改存储过程的代码。使用它的人员甚至不需要知道这些变化。这一点的延伸就是安全性。通过存储过程限制对基础数据的访问减少了数据讹误(无意识的或别的原因所导致的数据讹误)的机会;
    4) 提高新能。因为使用存储过程比使用单独的SQL语句要快;
    5) 存在一些只能用在单个请求中的MySQL元素和特性,存储过程可以使用它们来编写功能更强更灵活的代码。存储过程的3个好处:简单、安全、性能高;
   缺点
    1) 存储过程的编写比基本SQL语句复杂,编写存储过程需要更高的技能,更丰富的经验;
    2) 你可能没有创建存储过程的安全访问权限,许多数据库管理员限制存储过程的创建权限,允许用户使用存储过程,但不允许他们创建存储过程;
分享到:
评论

相关推荐

    mysql存储过程教程

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列SQL语句并封装成一个可重复使用的单元,从而提高数据处理的效率和代码的复用性。本教程将深入探讨MySQL存储过程的创建、调用以及相关概念...

    mysql存储过程之创建(CREATE PROCEDURE)和调用(CALL)及变量创建(DECLARE)和赋值(SET)操作方法

    MySQL存储过程是数据库中一种非常实用的功能,它允许开发者封装一系列SQL语句成一个可重复使用的单元,便于管理和执行复杂的数据库操作。本篇文章将详细探讨如何在MySQL中创建存储过程、调用存储过程以及声明和赋值...

    MySQL存储过程的异常处理方法

    本实例展示了如何在MySQL存储过程中实现异常处理,以捕获并处理可能出现的错误。 首先,我们注意到在创建存储过程`myProc`时,使用了`delimiter $$`来改变MySQL客户端的语句分隔符,这是为了在存储过程中使用多个...

    Java实现调用MySQL存储过程详解

    总的来说,Java通过JDBC调用MySQL存储过程涉及到连接数据库、创建`CallableStatement`、执行存储过程和处理结果。这使得开发者能够在Java应用中灵活地利用数据库提供的强大功能,实现更高效的数据处理。

    MySQL存储过程.pdf

    MySQL存储过程(Stored Procedure)是一种复杂的数据库对象,允许用户将多个SQL语句组合成一个单一的执行单元,以提高数据库的性能和可维护性。下面是 MySQL 存储过程的相关知识点: 存储过程的定义和示例 存储...

    c++实现调mysql存储过程

    c++实现调mysql存储过程,实现存储过程的出参入参,可以支持查询多数据返回,还有存储过程的复杂数据的增删改等

    MySQL存储过程学习

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列的SQL语句,形成一个可重复使用的代码块,以提高数据处理的效率和应用程序的性能。在这个"MySQL存储过程学习"的主题中,我们将深入探讨...

    MySQL 存储过程入门到精通

    MySQL存储过程是数据库管理系统中的一个重要特性,它允许程序员或数据库管理员预先定义一组SQL语句,形成一个可重用的逻辑单元。在这个“MySQL存储过程入门到精通”资料中,你将深入理解存储过程的原理、创建、调用...

    mysql存储过程实例

    MySQL 存储过程实例 MySQL 存储过程实例详细介绍了 MySQL 存储过程的开发步骤,本节将通过具体的实例讲解 PHP 是如何操纵 MySQL 存储过程的。 创建存储过程 存储过程的创建是 MySQL 存储过程的基础,MySQL 5.0 ...

    MySQL存储过程.rar

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列的SQL语句,形成一个可重复执行的单元,极大地提高了数据库操作的效率和便捷性。在MySQL中,存储过程可以包含复杂的业务逻辑,比如条件...

    使用MYSQL5创建存储过程procedure

    在MySQL5中,存储过程(Procedure)是一种非常重要的数据库编程元素,它允许用户预先定义一组SQL语句并将其封装在一起,以便在需要时作为一个单元执行。这样不仅可以提高代码的复用性,还可以优化数据库操作的效率,...

    mysql存储过程实现分页

    ### MySQL存储过程实现分页 #### 背景与需求 在数据库操作中,分页是一种常见的需求,尤其是在处理大量数据时。通过分页技术,可以有效地减少每次查询的数据量,提高系统的响应速度和用户体验。MySQL作为一种广泛...

    mysql存储过程、触发器.pdf

    MySQL 存储过程和触发器详解 MySQL 存储过程是指一组为了完成特定功能的 SQL 语句集合。存储过程的优点包括: 1. 封装性:存储过程可以将多个 SQL 语句封装在一起,方便调用和维护。 2. 可增强 SQL 语句的功能和...

    MySQL存储过程 MySQL存储过程

    ### MySQL存储过程详解 #### 一、MySQL存储过程概述 MySQL 存储过程是一种服务器端的编程技术,它允许开发者创建可重复使用的代码模块。这些模块可以包含一系列复杂的 SQL 语句和其他流程控制语句。MySQL 5.0 版本...

    mysql 存储过程 实战

    ### MySQL存储过程实战知识点 #### 一、存储过程概述 MySQL 存储过程是一种预编译的 SQL 脚本,它可以包含复杂的逻辑控制结构、循环等操作,并且可以接受参数,执行完后还可以返回结果。存储过程可以提高数据处理...

    MYSQL存储过程教程

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预定义一组SQL语句,并将其封装成一个可重复使用的单元。这个教程将深入讲解如何在MySQL中创建、调用和管理存储过程,以及它们在实际应用中的价值。 ...

    mysql存储过程——用于数据库的备份与还原

    在压缩包中的"procedure"文件可能包含了实现上述功能的MySQL存储过程代码。这个存储过程可能包含了一些内部函数或变量来处理表名列表,以及可能的配置选项,如是否备份触发器、索引等。为了使用这个存储过程,你需要...

Global site tag (gtag.js) - Google Analytics