• mysql中的存储过程


    存储过程的作用:有助于提高应用程序的性能。存储过程可以不必发送多个冗长的SQL语句

    废话不说多,直接实操

    1. ##实现num的相加
    2. delimiter $$
    3. CREATE PROCEDURE test1 ()
    4. begin
    5. declare num int default 0; -- 声明变量,赋默认值为0
    6. select num+20;
    7. end $$
    8. delimiter ; --将结束符修改成;
    9. call test1(); -- 调用存储过程
    10. drop procedure test1 --如果不需要此存储函数开源删除咯
    1. set赋值操作
    2. delimiter $$
    3. CREATE PROCEDURE test2 ()
    4. begin
    5. declare num int default 0;
    6. set num =50; -- 给num变量赋值
    7. select num;
    8. end $$
    9. delimiter ;
    10. call test2();
    1. into的使用方法
    2. delimiter $$
    3. CREATE PROCEDURE test3 ()
    4. begin
    5. declare num int default 0;
    6. select count(1) into num from t_student_info; --计算t_student_info表的个数用num来记录
    7. select num;
    8. end $$
    9. delimiter ;
    10. drop procedure test3; 删除该存储函数
    11. call test3();
    1. if的使用
    2. delimiter $$
    3. CREATE PROCEDURE test4 ()
    4. begin
    5. declare id int default 1;
    6. declare class_name varchar(20);
    7. if id=1 then
    8. set class_name='要多久你才可以爱上我!';
    9. elseif id=2 then
    10. set class_name='不再让自己遗憾了';
    11. else
    12. set class_name='不用想了,谁都不爱我,我只爱我自己';
    13. end if;
    14. select class_name;
    15. end $$
    16. delimiter ;
    17. call test4();

    mysql> delimiter;
    ERROR: 
    DELIMITER must be followed by a 'delimiter' character or string

    使用delimiter;会报错,一定要带空格
     

    1. 定义一个输入参数
    2. delimiter $$
    3. CREATE PROCEDURE test5 (in id int)
    4. begin
    5. declare class_name varchar(20);
    6. if id=1 then
    7. set class_name='我和xhell脚本的if不一样!';
    8. elseif id=2 then
    9. set class_name='我和python中的if语法有一点带你不一样';
    10. else
    11. set class_name='不用想了,不靠别人';
    12. end if;
    13. select class_name;
    14. 注:存储过程中声明了 class_name 变量并对其进行了赋值,但并没有通过 SELECT 语句来显示其值。你需要在存储过程末尾添加 SELECT class_name; 语句,以便在调用存储过程时返回 class_name 的值
    15. end $$
    16. delimiter ;
    17. call test5(3);
    1. case的使用
    2. delimiter $$
    3. CREATE PROCEDURE test6 (in month int,out season varchar(10))
    4. begin
    5. case
    6. when month >=1 and month<=3 then
    7. set season='spring';
    8. when month >=4 and month<=6 then
    9. set season='summer';
    10. when month >=7 and month<=9 then
    11. set season='autumn';
    12. when month >=10 and month<=12 then
    13. set season='winter';
    14. end case;
    15. end $$
    16. delimiter ;
    17. call test6(9,@season); -- 定义会话变量来接收test8存储过程返回的值
    18. select @season;
    19. @xxx:代表定义一个会话变量,整个会话都可以使用,当会话关闭(连接断开)时销毁
    20. @@xxx:代表定义一个系统变量,永久生效。

    1. while循环的使用
    2. delimiter $$
    3. CREATE PROCEDURE test7 (in count int)
    4. begin
    5. declare total int default 0;
    6. declare i int default 1;
    7. while i<=count do
    8. set total=total+i;
    9. set i=i+1;
    10. end while;
    11. select total;
    12. end $$
    13. delimiter ;
    14. call test7(10);

    1. repeat的使用
    2. delimiter $$
    3. CREATE PROCEDURE test7 (count int) -- 默认是输入(in)参数
    4. begin
    5. declare total int default 0;
    6. repeat
    7. set total=total+count;
    8. set count=count-1;
    9. until count=0 -- 结束条件,注意不要打分号
    10. end repeat;
    11. select total;
    12. end $$
    13. delimiter ;
    14. call test8(10);
    15. 使用 select total; 语句输出 total 的最终值。
    16. total 是局部变量,只在该存储过程内部有效。
    17. 而 @total 是用户变量,可以在整个会话中使用和共享。

    1. loop的使用
    2. delimiter $$
    3. CREATE PROCEDURE test9 (count int) -- 默认是输入(in)参数
    4. begin
    5. declare total int default 0;
    6. sum:loop -- 定义循环标识
    7. set total=total+count;
    8. set count=count-1;
    9. if count < 1 then
    10. leave sum; -- 跳出循环
    11. end if;
    12. end loop sum; -- 标识循环结束
    13. select total;
    14. end $$
    15. delimiter ;
    16. call test9(10);
    1. 创建一张临时表:
    2. create temporary table temp_table(
    3. id int,
    4. name varchar(10)
    5. );
    6. insert into temp_table values (1,'xiaoxiaowang');
    7. select * from temp_table ;
    8. 注意:临时表示查询不到的
    9. show tables; -- 不会显示临时表的存在
    1. 测试存储过程创建临时表是可以查到的,但是在存储函数中是查看不到的,结果会报错:
    2. create procedure pro1()
    3. begin
    4. create temporary table temp_table(
    5. id int
    6. );
    7. insert into temp_table values(1);
    8. select * from temp_table;
    9. end;
    10. call pro1();
    1. 测试存储函数创建临时表
    2. create function fun2()
    3. returns int
    4. begin
    5. declare id int ;
    6. create table temp_table(
    7. id int
    8. );
    9. insert into temp_table values(1);
    10. select id from into id temp_table;
    11. return id;
    12. end;

    怎么查看自己创建了多少的存储过程????????????

    SHOW PROCEDURE STATUS WHERE Db = 'your_database_name';
    咱们的业务应该放到咱们的业务层,而不是把业务滞留到数据库来处理,将业务和数据库严重耦合在一起了!这是导致公司开发不使用存储过程的


     

  • 相关阅读:
    vue+echarts项目七:热销商品占比(可切换饼图)
    Windows 堆管理机制 [3] Windows XP SP2 – Windows 2003 版本
    linux上安装apktool反编译apk解析AndroidManifest.xml得到首页Activity
    c++作业
    gst-launch-1.0
    动态树的最值
    【python技巧】替换文件中的某几行
    未来:spring响应式编程 Hands-On Reactive Programming in Spring 5(二)------Basic Concepts
    K8s中集成Heketi使用Glusterfs
    IIR滤波器设计基础及Matlab设计示例
  • 原文地址:https://blog.csdn.net/m0_62975692/article/details/140375935