1.存储过程
📖什么是存储过程?
存储过程和函数是事先经过编译并存储在数据库中的一段sql语句集合,调用存储过程函数可以简
化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的
效率是有好处的。
存储过程和函数的区别:
1. 函数必须有返回值,而存储过程没有。
2. 存储过程的参数可以是IN、OUT、INOUT类型,函数的参数只能是IN
📘优点
存储过程只在创建时进行编译;而SQL语句每执行一次就编译一次,所以使用存储过程可以
提高数据库执行速度
简化复杂操作,结合事务一起封装
复用性好
安全性高,可指定存储过程的使用权
注意:并发量少的情况下,很少使用存储过程。并发量高的情况下,为了提高效率,用存储过程
比较多
存储过程练习
1、创建一个存储过程avg_sal_a,有2个参数,分别是部门名称dept_name及接收平均工资其中部门名称测试参数为上海中心,接收平均薪资变量为@a。
mysql> select avg(salary) from employee where department_NO in (select number from department where name = "上海中心");--查询sql
+-------------+
| avg(salary) |
+-------------+
| 2800.000000 |
+-------------+
1 row in set (0.00 sec)
mysql> \d $--改结束符
--创建存储过程
mysql> create procedure avg_sal_a(in dept_name varchar(255),out avg_dept int)-> begin-> select avg(salary) into avg_dept from employee where department_NO in (select number from department where name = dept_name);-> end$
Query OK, 0 rows affected (0.00 sec)
mysql> \d ;--改回结束符
mysql> call avg_sal_a("上海中心",@a);--使用存储过程
Query OK, 1 row affected (0.00 sec)
mysql> select @a;--查看参数
+------+
| @a |
+------+
| 2800 |
+------+
1 row in set (0.00 sec)
2.创建存储过程,给定参数员工姓名,查询该员工名所在部门的最高薪资,并返回给变量@a;
mysql> select max(salary) from employee group by department_NO having department_NO = (select department_NO from employee where name =
"吴所为");--查询语句
+-------------+
| max(salary) |
+-------------+
| 2800.00 |
+-------------+
1 row in set (0.00 sec)
mysql> \d $--改结束符
--创建存储过程
mysql> create procedure max_sal_e(in e_name varchar(255),out max_sal int)-> begin-> select max(salary) into max_sal from employee group by department_NO having department_NO = (select department_NO from employee where name = e_name);-> end&
Query OK, 0 rows affected (0.00 sec)
mysql> \d ;--改回结束符
mysql> call max_sal_e("吴所为",@a);--使用存储过程
Query OK, 1 row affected (0.00 sec)
mysql> select @a;--查看
+------+
| @a |
+------+
| 2800 |
+------+
1 row in set (0.00 sec)