准备工作:
CREATE DATABASE dbtest15;
USE dbtest15;
CREATE TABLE employees
AS SELECT * FROM atguigudb.`employees`
CREATE TABLE departments
AS
SELECT * FROM atguigudb.`departments`;
SELECT * FROM employees;
SELECT * FROM departments;
创建存储过程:

存储过程的调用:
CALL select_all_data()




创建存储过程:

调用:
CALL show_min_salary(@ms);
查看变量值:
SELECT @ms


调用方式一:
CALL show_someone_salary('Abel');
调用方式二:
SET @empname = 'Abel';
CALL show_someone_salary(@empname);

创建存储过程:

调用:
SET @empname = 'Abel'
CALL show_someone_salary2(@empname,@empsalary);
SELECT @empsalary

创建存储过程:


SET @empname = 'Abel';
CALL show_mgr_name(@empname);
SELECT @empname;

若在创建存储函数中报错you might want to use the less safe log_bin_trust_function_creatorsvariable有两种处理方法:
方式一:加上必要的函数特性

方式二:

调用:
SELECT email_by_name();


SELECT email_by_id(101)


SET @dept_id = 30;
SELECT count_by_id(@dept_id)


存储函数可以放在查询语句中使用,存储过程不行。
存储过程的功能更加强大,包括能够执行对表的操作(比如创建表,删除表等)和事务操作,这些功能是存储函数不具备的。
SHOW CREATE PROCEDURE show_mgr_name;


SHOW PROCUDURE STATUS

SHOW PROCUDURE STATUS LIKE 'show_max_salary';

SHOW FUNCTION STATUS LIKE 'show_max_salary';

SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME='email_by_id AND ROUTINE_TYPE = 'FUNCTION';



优点:

缺点:


1.创建存储过程insert user() ,实现传入用户名和密码,插入到admin表中



2.创建存储过程get_phone(),实现传入女神编号,返回女神姓名和女神电话




3.创建存储过程date_ diff(), 实现传入两个女神生日,返回日期间隔大小



4.创建存储过程format_ date(), 实现传入-一个日期,格式化成xx年xx月xx日并返回



5.创建存储过程beauty limit(), 根据传入的起始索引和条目数,查询女神表的记录



6.创建带inout模式参数的存储过程,传入a和b两个值,最终a和b都翻倍并返回。



7.删除题目5的存储过程

8.查看题目6中存储过程的信息

1.创建函数get_ count(), 返回公司的员工个数



2.创建函数ename_ salary(), 根据员工姓名,返回它的工资

3.创建函数dept_ sal() , 根据部门名,返回该部门的平均工资



创建函数add_ float(), 实现传入两个float,返回二者之和


