准备工作:
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,返回二者之和