zoukankan      html  css  js  c++  java
  • Mysql:语法:存储程序(存储过程、存储函数、视图、触发器、计划任务)

    存储程序分类

    • 存储过程
    • 存储函数
    • 视图
    • 触发器
    • 计划任务


    在mysql.exe客户端里写存储程序的";"分割符问题

      这个问题来自mysql.exe客户端本身以";"作为语句的分隔符(结束符)本身。而大部分的管理、开发mysql的应用程序均类似于mysql.exe,所以必须通过delimiter这个mysql服务器可识别的命令来临时修改服务器认可的有效语句分隔符



    存储程序组成结构
       [label name]
       begin
         [declare 普通变量|declare异常别名];
         [declare 异常别名|declare普通变量];
         [declare 游标;]
         [declare 异常处理;]
        
         [begin end 复合语句;]

     
         [循环语句;]
         [条件语句;]
         ......
      
       end [{lable name}]
      //


    declare本地变量
      declare va11 [,var2] [,...] date_type [default value    --可以是表达式、常量]

    • 本地变量声明时要注意先后顺序:普通变量、游标、操作符
    • 本地变量可以一次声明同类型的多个变量 --类似于c语言,不同于postgresql、oracle;不可以指定[not] null 约束;不可以声明为constant 变量
    • 本地变量可以有初始化的default值,否则为null
    • 本地变量可以向内层begin end 符合语句传递,除非她被内层同名变量overide
    • 本地变量名字不要和表列同名,在过程内,本地变量总是优先被采用


    set变量赋值
      set var1 = value1 [,var2 = value2] [,....]
      mysql的set语句可以对本地变量、系统变量、用户自定义变量赋值,而不仅仅是本地变量!

    select变量赋值 必须返回0行或 1 行 记录
      select col1 [,col2] [,exp1] [,exp2] [,....] into val1 [,val2] [,val3] [,val4] [,....] from table_express

    1. 如果select没有返回数据,mysql有no data 的警告:warning with error code 1329 产生,变量保持原值
    2. 如果select返回多行数据,mysql或发生错误!可以通过limit 1 来限制。



    mysql的异常处理
      declare conditon_name condition for {sqlstate [value] 'sqlvalue'|mysql_error_code}    --定义异常:目的是找一个含义更明显或更适合的名称;可理解为别名。
      declare {continue|exit|undo} handler for {sqlstate [value] 'sqlvalue'|mysql_error_code|conditon_name

          |sqlwarning|notfound|sqlexception} [,....]    --定义异常处理mysql的异常处理

    1. 类似于其他过程化sql语言的错误处理,只是结构和使用方法不同(postgresql、oracle都是固定的块结构的一可选部分exception;
    2. sqlserver是@@error 或try catch final)
    3. 这个handler可以和多个条件关联,类似于postgresql、oracle的when ... when ... when others...
    4. handler的sqlwarning 是 "01xxx"类的错误
    5. handler的not found 是 "02xxxx"类的错误
    6. handler的sqlexception 是 除了'00000'、'01xxxx'、"02xxxx"类的错误
    7. 注意sqlstate value ='00000' 或 mysql_error_code=0 表示操作成功,通常不应该去使用的!
    8. handler的continue表示当相关联的块的错误条件发生时、继续从出错的语句下一个语句执行;exit表示发生错误,立即终止程序的执行;undo目前尚未实现!
    9. 没有handler的块 或 定义了exit处理(不管是内层还是外层) 的程序 在错误发生时会终止程序的执行!
    10. 可以定义忽略任何错误的处理的空语句:declare continue handler for sqlwarning begin end;

    游标:只读、仅单步向前、不敏感的

        declare cursor_name cursor for no_into_select_clause;
        open cursor_name;
        fetch cursor_name into var1 [,var2] [,...] ; 可能会产生 not found 异常错误
        close cursor_name 如果没有显式调用关闭游标的语句,游标会在作用域超出定义该游标的scope是自动销毁

    •     mysql的cursor读取没有特殊的内部变量。利用handler 和 "not found"条件来处理



    控制结构
        if if_condition then
            statement_list;
        [elseif if_condition then statement_list;]
        [elsestatement_list;]
        end if;


        case
            when case_condition then statement_list;
            [when case_condition then statement_list;]
            [else statement_list;]
        end case;

       
    [repeat_label:] repeat    --其他语言的do循环结构
            statement_list;
        util repeat_condition
        end repeat
    [repeat_label];

       
    [while_label:] while while_condition do    --其他语言的while循环结构
            statement_list;
        end while
    [while_label];
       

        [loop_label:] loop        --一般循环结构,注意没有控制条件,必须在statement_list中含有控制条件、leave、iterate语句;
        then statement_list;
        end loop [loop_label];
       
       
        leave label_name;   

       
     
    类似其他语言的exit [when..],跳出结构。用来退出begin..end、loop、repeat、while,前提是必须处于相应的结构里,且结构定义了标签
       
       
        iterate label_name;   
      
     
    类似于其他语言的continue,继续下次循环。用来退出loop、repeat、while,前提是必须处于相应的结构里,且结构定义了标签
       

        函数的return exp; 语句    --仅仅用在存储函数中的语句!
       
       

  • 相关阅读:
    让 vscode 作为 SpringBoot,Java,Maven,甚至于 JavaScript,C,C++,Python,Php等多语言的开发工具吧!
    MySQL 连接错误集锦
    前端开发工具库:包含事件委托,动画处理,以及大部分常用的前端工具
    初探 Node.js 框架:eggjs (环境搭配篇)
    如何快速搭建一个 Node.JS 项目并进入开发?
    关于 JavaSrcipt 前端开发的建议:模块化开发
    Spring-Session 会话共享 -> 基于 Redis 集群,内附各大错误合集,包括配置,类寻找不到、连接错误等
    Java Email 邮件发送
    CSS 显示或隐藏子元素
    Ubuntu美化及配置,常见问题解决方案(仿 Mac 风格)
  • 原文地址:https://www.cnblogs.com/jinzhenshui/p/1498682.html
Copyright © 2011-2022 走看看