涉及存储过程的问题「建议收藏」

涉及存储过程的问题「建议收藏」存储过程(特定功能的SQL语句集) 一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后再次调用不需要编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储

存储过程(特定功能的SQL语句集)

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

1.创建存储过程:

  create procedure 存储过程名称 ([存储过程参数列表]) [存储过程特性] SQL代码内容

1 例:delimiter  //
2         create procedure proc() 3         begin
4         select * from userinfo; 5       end  //
6       delimiter;

代码100分

2.创建存储函数:

  create function 存储函数名称 ([存储过程参数列表]) returns type [存储函数特性] SQL代码内容

代码100分1 例:delimiter //
2         create function NameByZip() 3         returns char(50) 4         return (select username from userinfo where userage="23"); 5       //
6       delimiter;

3.变量的使用

  1)定义变量:declare 局部变量名称,…数据类型 [default value];

    例:declare myparam int default 100;

  2)为变量赋值:set 局部变量名称=expr,var_name=expr,…;

    例:declare var1,var2 int;

      set var1=10,var2=10;

4.定义条件和处理程序

  1)定义条件:declare 条件名称 condition for  sqlstate “xxxx”;

          declare 条件名称 condition for xxxx;

  2)定义处理程序:捕获 sqlstate_value: delcare continue handler for sqlstate “xxxx” set @info=”no_such_table”;

            捕获 mysql_error_code: declare continue handler for xxxx set @info=”no_such_table”;

5.光标的使用

  1)声明光标:declare 光标名称 cursor for SQL语句;

  2)打开光标:open 光标名称;

  3)使用光标:fetch 光标名称 into 字段名,…;

  4)关闭光标:close 光标名称;

6.流程控制语句

  if语句:if val is null then select “val is null”;  

      else select “val is not null”;  

      end if;

  case语句:case val

        when 1 then select “val is 1”;

        when 2 then select “val is 2”;

        else select “val is not 1 or 2”;

       end case;

  loop语句:declare id int default 0;

       add_loop:loop;

       set id = id + 1;  

        if id>=10 then leave add_loop;

        end if;

       end loop add_loop;

  leave语句:退出循环语句

  iterate语句:重新执行循环

  repeat语句:declare id int default 0;

        repeat

        set id = id + 1;

        until id >= 10;  ##先执行后判断

        end repeat;

  while语句:declare id int default 0;

       while id >=10 do  ##先判断后执行

       set id = id+1;

       end while;

7.调用存储过程和调用存储函数

  call 存储过程名称(存储过程定义的参数)

  select 存储函数名称(存储过程定义的参数)

8.查看存储过程和函数

  show {procedure | function} status like “x%” 语句查看存储过程和函数的状态

  show create {procedure | function} 存储函数名称 语句查看存储过程和函数的定义

9.修改存储过程和函数

  alter {procedure | function}存储函数名称 (存储过程特性)

10.删除存储过程和函数

  drop {procedure | function} [if exists] 存储函数名称

存储过程优缺点:

  优点:

    1)存储过程因为SQL语句已经预编译过了,因此运行的速度比较快;

    2)存储过程在服务器端运行,减少了客户端的压力。

    3)允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次,类似方法的复用;

    4)减少网络流量,客户端调用存储过程只需要传存储过程名和相关参数即可,与传输SQL语句相比自然数据量少了很多;

    5)增强了使用的安全性,充分利用系统管理员可以对执行的某一个存储过程进行权限限制,从而能够实现对某些数据访问的限制,避免非授权用户对数据的访问,保证数据的安全。程序员直接调用存储过程根本不知道表结构是什么,有什么字段,没有直接暴露表名以及字段名给程序员。

  缺点:

    调试麻烦(至少没有像开发程序那样容易),可移植性不灵活(因为存储过程是依赖于具体的数据库)。

存储过程优化思路:

  1)尽量利用一些SQL语句来代替一些小循环,例如聚合函数、求平均函数等。

  2)中间结果存放于临时表,加索引;

  3)少使用游标。SQL是一个集合语言,对于集合运算具有较高的性能。而cursors是过程运算,比如对一个100万行数据进行查询,游标需要读表100万次,而不是使用游标则只需要少量几次读取。

  4)事务越短越好,SQL server支持并发操作,如果事务过多过长或隔离级别过高,都会造成并发阻塞、死锁。导致查询极慢,CPU占用率极低。

  5)使用try…catch处理异常;

  6)查询语句尽量不要放在循环内;

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10659.html

(0)
上一篇 2022-12-23
下一篇 2022-12-24

相关推荐

  • DbgridEh数据导出到Excel的方法(Delphi)

    DbgridEh数据导出到Excel的方法(Delphi)本文内容严重参考了网上其他牛人的代码,并做了一些修改,使得参数更加简单,结构更清晰,所以就厚着脸皮说是原创。 uses DBGridEhImpExp; procedure TFrm_func.DbG…

    2023-04-01
    106
  • 使用Python if语句多个条件判断

    使用Python if语句多个条件判断Python作为广泛应用的编程语言之一,其if语句是编程中非常重要的一部分,在判断特定条件下的程序流程上有着非常重要的作用。当需要在多个条件中进行判断时,Python if语句的多个条件判断就成为了解决问题的关键。

    2024-04-15
    22
  • 甜甜老师1993教学视频_gauss db

    甜甜老师1993教学视频_gauss db无论你是做数据库运维还是数据库开发,都是围绕着数据库吃饭。然而随着计算和数据上云的趋势快速发展,计算和存储资源池化带来了系统设计的颠覆,传统数据库步履蹒跚。 另一方面,随着“国产风”和“去IOE化”的

    2023-02-17
    103
  • mysql进阶知识_什么是MySQL

    mysql进阶知识_什么是MySQLMYSQL(进阶篇)——一篇文章带你深入掌握MYSQL 我们在上篇文章中已经学习了MYSQL的基本语法和概念 在这篇文章中我们将讲解底层结构和一些新的语法帮助你更好的运用MYSQL 温馨提醒:该文章大

    2023-05-30
    98
  • 使用Python发送邮件

    使用Python发送邮件随着互联网的普及,电子邮件已成为人们日常生活和工作中必不可少的一种通讯方式。Python作为一种高效的编程语言,常被用来处理各种数据。当我们需要通过程序自动发送邮件时,Python便可以发挥出其优势。Python内置的smtplib和email库提供了一种灵活的方式来处理电子邮件,程序可以自动化地发送邮件,从而提高了邮件的发送效率,节约了使用者的时间。

    2024-01-03
    63
  • MySQL架构体系[亲测有效]

    MySQL架构体系[亲测有效]MySQL基本架构(一条SQL语句的执行过程) MySQL主要可以分为Server层和存储引擎层。 Server层包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现。

    2023-04-15
    107
  • mysql 执行查询SQL 一直执行不出结果「建议收藏」

    mysql 执行查询SQL 一直执行不出结果「建议收藏」今天执行一个mysql 语句, 一直在 执行,执行了5分钟了,还是没有出来结果。 # 每个组织下包括 同级或者下级的 注册店铺数 # 查询 历史每一天的每个组织下的当天存在的门店数 select d…

    2022-12-22
    90
  • Python的创始人 Guido van Rossum

    Python的创始人 Guido van Rossuma href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-05-05
    13

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注