zoukankan      html  css  js  c++  java
  • 数据库系统原理(第5章:数据库编程)

    一、存储过程

    概念:存储过程是一组为了完成某项特定功能的SQL语句集, 其实质就是一段存储在数据库中的代码。 它可以由声明式的sql语句和过程式sql语句组成。

    特点:

    • 可增强SQL语言的功能和灵活性
    • 良好的封装性
    • 高性能
    • 可减少网络流量
    • 可作为一种安全机制来确保数据库的安全性和数据的完整性

    用户定义的结束符(DELIMITER )

    • DELIMITER $$:
    • 例句:将MySQL结束符修改为两个感叹号“!!”  (DELIMITER !!)

    使用CREATE PROCEDURE语句创建存储过程:CREATE PROCEDURE sp_name([proc_parameter[,…]]) routine_body ;

    proc_paramete:指定存储过程的参数列表

    routine_body:存储过程的主体部分,也称为存储过程体

    [IN | OUT | INOUT] param_name type:参数 名,参数类型

    例如:在mysql_test中创建一个存储过程,用于实现给定表customers中一个客户id号即可修改表customers中该客户的性别为一个指定的性别

    使用DECLARE语句声明局部变量:DECLARE var_name[,…] type [DEFAULT value]

    例如:声明一个整型局部变量cid:   DECLARE cid INT(10);

    使用DECLARE语句声明局部变量的规范

    • 1)只能在存储过程体的BEGIN…END语句块中声明;
    • 2)必须在存储过程的开头处声明;
    • 3)作用范围仅限于声明它的BEGIN…END语句块;
    • 4)不同于用户变量

    局部变量与用户变量的区别:

    • 1)局部变量声明时,在其前面没有@符号,并且它只能 被声明它的BEGIN…END语句块中的语句所使用;
    • 2)用户变量在声明时,会在其名称前面使用@符号,同 时已声明的用户变量存在于整个会话之中。

    使用SET语句为局部变量赋值:SET var_name=expr[,var_name=expr]…                SET cid=910;

    使用SELECT…INTO语句把选定列的值直接存储到局部变量中

    流程控制语句

    • 1、条件判断语句 IF…THEN …ELSE语句 CASE语句   (IF 条件 THEN 表达式1 ELSE 表达式2 END IF;)
    • 2、循环语句 WHILE语句 REPEAT语句 LOOP语句

    WHILE 条件 表达式 END WHILE

    repeat 表达式 END repeat

    loop 表达式 END loop

    ITERATE语句 用于表示退出当前循环

    ****************************游标CURSOR*****************************************

    使用DECLARE CURSOR语句创建游标

    使用OPEN语句打开游标:OPEN cursor_name

    使用FETCH…INTO语句读取数据:

    使用CLOSE语句关闭游标 :CLOSE cursor_name

    **********************存储过程的使用************************

    使用CALL语句调用存储过程

     调用数据库mysql_test中的存储过程sp_update_sex,将客户id号为909的客户性别修改为男性“M”

    CALL sp_update_sex(909,’M’);

    使用DROP PROCEDURE语句删除存储过程

    DROP PROCEDURE[IF EXISTS] sp_name

    二、存储函数

    存储函数与存储过程一样,是由SQL语句和过程式语句组成的代码片段

    使用CREATE FUNCTION语句创建存储函数

    CREATE FUNCTION sp_name([func_parameter[,…]]) RETURNS type routine_body

    • sp_name:指定存储函数的名称
    • func_parameter:指定存储函数的参数
    • RETURNS type :声明存储函数返回值的数据类型; type指定返回值的数据类型
    •  routine_body 指定存储函数的主体部分,也称为存储函数体

    在数据库mysql_test中创建 一个存储函数,要求该函数能根据 给定的客户id号返回客户的性别, 如果数据库中没有给定的客户id号 ,则返回“没有该客户”。

    Use mysql_test;
    DELIMITER $$
    CREATE FUNCTION fn_search(cid INT)
    RETURNS CHAR(20)
    DETERMINISTIC
    BEGIN
    DECLARE SEX CHAR(20);
    SELECT cust_sex INTO SEX FROM customers
     WHERE cust_id=cid;
    IF SEX IS NULL THEN
    RETURN(SELECT’没有该客户’);
    ELSE IF SEX=‘F’ THEN
    RETURN(SELECT’女’);
     ELSE RETURN(SELECT ‘男’);
     END IF;
     END IF;
    END $$

     使用关键字SELECT调用存储函数:SELECT sp_name([func_parameter[, …]])

    使用DROP FUNCTION语句删除存储函数:DROP FUNCTION [IF EXISTS] sp_name

  • 相关阅读:
    设计模式之装饰模式
    强化学习运行环境,atari 2600 游戏模拟器,atari-py库 —— 无法运行游戏,pacman,surround,报错: Segmentation fault (core dumped)
    【转载】 DQN玩Atari游戏安装atari环境bug指南
    【转载】 windows python3 安装 openai gym 的 atari_py
    【转载】 ubuntu18.04 cmake版本 更新方法
    强化学习baseline论文—— rainbow算法中给出实验结果的54个atari2600游戏名称列表
    UBUNTU18.04 SERVER 多显卡 服务器,为防止显卡计算任务出现不意外报错,设置显卡工作状态为:设定持久模式
    【转载】 nvidia-smi
    记录一次实验室显卡服务器崩溃事件(Ubuntu18.04 server系统,4块NVIDIA的特斯拉显卡)
    【转载】 Tensorboard:PermissionError: [Errno 13] Permission denied: ‘/tmp/.tensorboard-info/pid-46614.info‘
  • 原文地址:https://www.cnblogs.com/jalja/p/11611440.html
Copyright © 2011-2022 走看看