【MySQL】视图、存储过程和函数

一、视图

概念:MySQL从5.0.1版本开始提供视图功能。一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表 ,并且是在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果。

          就类似于封装了一个sql语句,里面有具体的操作你只需要调用即可使用。 

应用场景: 多个地方用到同样的查询结果、该查询结果使用的sql语句较复杂

创建视图:

create view 视图名称 as 查询语句;

 使用视图:

select * from 视图名;

 修改视图:

alter view 视图名称 as 查询语句

 删除视图(可以一次删除多个视图):

drop view if exists 视图名称,视图名....;

    查看视图:

DESC 视图名;

SHOW CREATE VIEW 视图名;

   案例1:创建视图要求查询部门最高工资高于12000的部门信息

             先创建视图后使用

CREATE VIEW testv1
AS
SELECT MAX(salary) mx,department_id
FROM employees
GROUP BY department_id
HAVING MAX(salary)>12000; 


SELECT d.*,v1.mx
FROM departments d
JOIN testv1 v1
ON d.department_id = v1.department_id;

二、存储过程

概念:一组事先经过编译并存储在数据库中的一段SQL语句的集合,类似于Java里的方法,直接区调用。

使用好处: 1、简化应用开发人员的很多工作

                   2、减少数据在数据库和应用服务器之间的传输

                   3、提高了数据处理的效率

创建存储过程语法:       

CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
	存储过程体(一组合法的SQL语句);
END

     注意:参数列表包含三部分:参数模式、参数名、参数类型

                举例:IN stuname varchar(20)

                参数模式:  IN:该参数可以作为输入,也就是该参数需要调用方法传入值

                                    OUT:该参数可以作为输出,也就是该参数可以作为返回值

                                    INOUT:该参数既可以作为输入也可以作为输出,也就是该参数既需要传入值,又可以返回值

                 如果存储过程体只有一句话,BEGIN END就可以省略

                 存储过程提中每条SQL语句都必须加分号

    为了避免存储体中分号结束语句,我们使用分隔符DELIMITER告诉mysql解释器,该段命令是否已经结束了

                      例如:在存储过程上写上DELIMITER $   知道遇到下一个$才会去执行。

调用语法

CALL 存储过程名(实参列表);

 案例1:求1-n的和

             为了避免存储体中分号结束语句,我们使用分隔符DELIMITER告诉mysql解释器,该段命令是否已经结束了。

DELIMITER $
CREATE PROCEDURE SUM(IN n INT)
BEGIN
        #定义total、num两个变量
	DECLARE total INT DEFAULT 0;
	DECLARE num INT DEFAULT 0;
	WHILE num < n DO
	SET num:=num+1;
	SET total:=total+num;
	END WHILE;
        #输出total
	SELECT total;
END$

             调用

#求1~10的和
call p1(10)$

案例2:创建存储过程实现传入用户名和密码,插入到admin表中

DELIMITER $
CREATE PROCEDURE test_1(IN username VARCHAR(20),IN loginPwd VARCHAR(20))
BEGIN
	INSERT INTO admin(admin.username,admin.password)
	VALUES(username,loginPwd);
END$

             调用

#向表中插入的用户名xyz,密码为zh
CALL test_1('xyz','zh')$

删除存储过程语法

DROP PROCEDURE 存储过程名;

查看存储过程信息:

SHOW CREATE PROCEDURE 存储过程名;

三、函数

概念:一组事先经过编译并存储在数据库中的一段SQL语句的集合,类似于Java里的方法,直接区调用。

使用好处: 1、简化应用开发人员的很多工作

                   2、减少数据在数据库和应用服务器之间的传输

                   3、提高了数据处理的效率

特点:有且仅有1个返回,适合做处理数据后返回一个结果

创建语法

CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
BEGIN
    函数体
END

   参数列表包含两部分:参数名、参数类型

   函数体:肯定会有return 语句,如果没有会报错

   也需要使用DELIMITER设置结束标记

案例1:返回公司员工个数

DELIMITER $
CREATE FUNCTION test1() RETURNS INT
BEGIN 
        #创建一个局部变量用于return返回
	DECLARE total INT DEFAULT 0;
	SELECT COUNT(*) INTO total
	FROM employees;
	RETURN total;
END $

 案例1:根据员工名返回他的工资

DELIMITER $
CREATE FUNCTION test2(empName VARCHAR(20)) RETURNS DOUBLE
BEGIN 
	#定义用户变量用于返回
	SET @sal = 0;
	SELECT salary INTO @sal
	FROM employees
	WHERE last_name = empName;
	RETURN sal;
END $

调用函数:

SELECT 函数名(参数列表)$

查看函数:

SHOW CREATE FUNCTION 函数名;

删除函数:

DROP FUNCTION 函数名;

猜你喜欢

转载自blog.csdn.net/weixin_41963657/article/details/89433982