• MySQL 高级部分


    一、存储过程

    存储过程是存储在数据库目录中的一段声明性sql语句,感觉其功能类似函数。

    1.简单的存储过程

    我们可以通过create procedure procedure_name 语句创建存储过程,然后通过call procedure_name 语句调用存储过程。

    delimiter //
        create procedure procedure_name( )
            begin
            select * from table_name
            end //
    delimiter ;

    下面我们来详细的说明上述存储过程:

    • 第一个命令delimiter // ,与存储过程语法无关。它是将标准分隔符--逗号(;)改为--双斜杠(//)。因为我们想将存储过程作为整体传给服务器,而不是让MySQL依次解释每个语句。关键字end后使用分隔符//来指示存储过程的结束,左后将分隔符该回分号。
    • 使用create procedure语句创建存储过程。
    • begin 和 end 之间的部分是存储过程的主题,将声明性的sql语句放在主题中以处理业务逻辑。
    2.声明变量

    要在存储过程中声明一个变量,可使用declare 语句,其基本语法格式如下:

    declare variable_name datetype( size ) default default_value;

    声明变量后,就可以开始使用变量了。我们可以使用set 语句为其分配值,也可以使用 select into 语句将查询结果分配给一个变量.

    例如,假设我们有一个产品表(products),我们声明两个变量 total_count 和 m,将totla_count赋值为10,将products表的数据个数赋值给m:

    declare total_count,m int default 0;
    
    set total_count = 10;
    
    select count(*) into m
    from products;

    注意:变量有自己的范围(作用域),它用来定义它的生命周期。 如果在存储过程中声明一个变量,那么当达到存储过程的END语句时,它将超出范围,因此在其它代码块中无法访问。

    3.参数简介

    mysql中参数有三种模式:IN、 OUT或INOUT

    • IN: 是默认模式。在存储过程中定义IN参数时,调用程序必须将参数传递给存储过程。另外,IN参数的值被保护,这就是说存储过程只使用IN参数的副本,对副本的操作不影响参数本身。
    • OUT: 可以在存储过程中更改OUT参数的值,并将修改后的新值传递回调用函数,但是存储过程启动时无法访问OUT参数的初始值。
    • INOUT: 是上面两种参数的结合,调用程序可以传递参数,并且存储过程中修改INOUT参数的值可以传递回调用函数。

    存储过程中定义参数的语法如下:

    MODE param_name param_type( param_size )

    根据存储过程中参数的目的,MODE可以是IN、OUT或INOUT。

    以下示例说明如何使用GetOfficeCountry存储过程中的IN参数,来查询选择位于特定国家的办公室。

    use yiibaidb;
    drop procedure in exists 'GetOfficeCountry';
    
    delimiter $$
    use yiibaidb $$
    create procedure GetOfficeCountry( IN countryName varchar(255) )
        begin
        select *
        from offices
        where country = countryName;
        end $$
    
    delimiter ;

    假设我们要查询在美国(USA)的所有办事处,只需要将参数UAS传递给GetOfficeCountry这个存储过程,如下:

    call GetOfficeCountry('USA');
  • 相关阅读:
    CentOS7 Failed to start LSB: Bring up/down解决方法
    【转】Java包管理器Maven学习
    Android开发-API指南-<category>
    Android开发-API指南-<application>
    Android开发-API指南-<activity-alias>
    Android开发-API指南-<activity>
    Android开发-API指南-<action>
    Android开发-API指南-Android简介
    Android开发-API指南-Activity
    Android开发-API指南-应用程序开发基础
  • 原文地址:https://www.cnblogs.com/jxc321/p/7534953.html
Copyright © 2020-2023  润新知