mysql存储过程有这一篇就够(呕心狂写一万字,保姆级mysql存储过程技巧,建议收藏夹吃灰)

mysql存储过程有这一篇就够(呕心狂写一万字,保姆级mysql存储过程技巧,建议收藏夹吃灰)

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升

一、存储过程概述

1.1、什么是存储过程

存储过程是数据库中的一个重要对象。

存储过程是在数据库系统中,一组为了完成特定功能的SQL 语句集。存储过程是存储在数据库中,一次编译后,到处运行。不需要再次编译,用户通过指定存储过程的名字并传递参数(如果该存储过程带有参数)来执行。

1.2、存储过程特点

用来完成较复杂业务

比较灵活,易修改,好编写,可编程性强

编写好的存储过程可重复使用

1.3、存储过程优缺点

优点

存储过程在创建的时候直接编译,sql语句每次使用都要编译,效率高。

存储过程可以被重复使用。

存储过程只连接一次数据库,sql语句在访问多张表时,连接多次数据库。

存储的程序是安全的。存储过程的应用程序授予适当的权限。

缺点

在那里创建的存储过程,就只能在那里使用,可移植性差。

开发存储过程时,标准不定好的话,后期维护麻烦。

没有具体的编辑器,开发和调试都不方便。

太复杂的业务逻辑,存储过程也解决不了。

二、存储过程创建

2.1、创建格式

格式:

create procedure 过程名()

begin

......

end;

案例:

查看员工与部门表中的全信息

create procedure dept_emp()

begin

select * from dept;

select * from emp;

end;

mysql> call dept_emp();

+----+-----------+

| id | name |

+----+-----------+

| 1 | 研发部 |

| 2 | 渠道部 |

| 3 | 教务部 |

| 4 | 执行部 |

+----+-----------+

4 行于数据集 (0.02 秒)

+----+--------+--------+--------+------------+---------+

| id | name | gender | salary | join_date | dept_id |

+----+--------+--------+--------+------------+---------+

| 1 | 张三 | 男 | 7200 | 2013-02-24 | 1 |

| 2 | 李四 | 男 | 3600 | 2010-12-02 | 2 |

| 3 | 王五 | 男 | 9000 | 2008-08-08 | 2 |

| 4 | 赵六 | 女 | 5000 | 2015-10-07 | 3 |

| 5 | 吴七 | 女 | 4500 | 2011-03-14 | 1 |

| 6 | 王一 | 男 | 8768 | 2013-12-05 | NULL |

| 7 | 王二 | 女 | NULL | NULL | NULL |

+----+--------+--------+--------+------------+---------+

7 行于数据集 (0.05 秒)

Query OK, 0 rows affected (0.05 秒)

2.2、变量

格式:

declare 变量名 变量类型 default 默认值; #声明变量

set 变量名=值; #变量赋值

select 字段名 into 变量名 from 数据库表; #查询表中字段,完成变量赋值

select 变量名; #显示变量

案例:

查看员工表中id=1的员工的姓名

create procedure emp_name()

begin

declare ename varchar(20) default '';

select name into ename from emp where id=1;

select ename;

end;

mysql> call emp_name();

+--------+

| ename |

+--------+

| 张三 |

+--------+

1 行于数据集 (0.01 秒)

Query OK, 0 rows affected (0.01 秒)

2.3、变量作用域

存储过程中变量是有作用域的,作用范围在begin和end块之间,end结束变量的作用范围即结束。

变量可分为:

局部变量: begin和end块之间

全局变量: 放在所有代码块之前;传参变量是全局的,可以在多个块之间起作用

案例:

查看员工的人数与部门表中的部门数,并找出最高和最低工资(局部变量)

create procedure dept_or_emp()

begin

begin

declare e_n int default 0;

declare d_n int default 0;

select count(*) into e_n from emp;

select count(*) into d_n from dept;

select e_n,d_n;

end;

begin

declare max_s double default 0;

declare min_s double default 0;

select max(salary) into max_s from emp;

select min(salary) into min_s from emp;

select max_s,min_s;

end;

end;

mysql> call dept_or_emp();

+------+------+

| e_n | d_n |

+------+------+

| 7 | 4 |

+------+------+

1 行于数据集 (0.26 秒)

+-------+-------+

| max_s | min_s |

+-------+-------+

| 9000 | 3600 |

+-------+-------+

1 行于数据集 (0.26 秒)

Query OK, 0 rows affected (0.26 秒)

查看员工的人数与部门表中的部门数,并找出最高和最低工资(全局变量)

create procedure dept_or_emp1()

begin

相关推荐

尼日利亚足球崛起世界杯冲击渐近有望创历史最佳成绩
365bet娱乐场手机版

尼日利亚足球崛起世界杯冲击渐近有望创历史最佳成绩

📅 07-11 👁️ 763
中国美女在世界杯舞台上的闪耀时刻:从赛场到镜头背后的风采与魅力
进化论解释不了:为什么2亿年来,鳄鱼几乎没有任何变化?
蜻蜓吃什么东西作为食物
365账号禁止投注

蜻蜓吃什么东西作为食物

📅 07-05 👁️ 6930
盘点物联网中常用的7种短距离无线通信技术
365bet娱乐场手机版

盘点物联网中常用的7种短距离无线通信技术

📅 06-27 👁️ 1519
内侧剧情任务攻略。(全部)
365bet娱乐场手机版

内侧剧情任务攻略。(全部)

📅 07-09 👁️ 5377