文章目录
- 系列文章目录
- 一、视图是什么?
- 二、创建视图
- 1.创建单表视图
- 三、查看视图
- 四、更新视图
- 五、修改删除视图
- 六、视图的优缺点
- 七、什么是存储过程
- 八、创建存储过程
- 九、调用存储过程
一、视图是什么?
- 视图是一种虚拟表,本身是不具有数据的。
- 视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。
- 视图的创建和删除只影响视图本身,不影响对应的基表。但是当对视图中的数据进行增加、删除和修改操作时,数据表中的数据会相应地发生变化,反之亦然。
- 可以将视图理解为存储起来的 SELECT 语句。
- 视图,是向用户提供基表数据的另一种表现形式。通常情况下,小型项目的数据库可以不使用视图,但是在大型项目中,以及数据表比较复杂的情况下,视图的价值就凸显出来了,它可以帮助我们把经常查询的结果集放到虚拟表中,提升使用效率。理解和使用起来都非常方便。
二、创建视图
1.创建单表视图
CREATE VIEW 视图名1
AS
SELECT employee_id, last_name, salary FROM 表名
WHERE department_id = 80;
查询视图
SELECT *
FROM 视图名1;
三、查看视图
查看数据库的表对象、视图对象
SHOW TABLES;
查看视图的结构
DESC / DESCRIBE 视图名称;
查看视图的属性信息
SHOW TABLE STATUS LIKE '视图名称'\G
查看视图的详细定义信息
SHOW CREATE VIEW 视图名称;
四、更新视图
操作类似更新表。
要使视图可更新,视图中的行和底层基本表中的行之间必须存在一对一的关系。所以有些视图不支持更新。
五、修改删除视图
修改视图
ALTER VIEW 视图名称
AS
查询语句
删除视图
删除视图只是删除视图的定义,并不会删除基表的数据。
DROP VIEW IF EXISTS 视图名称;
六、视图的优缺点
优点
- 将经常使用的查询操作定义为视图,简化查询操作
- 它存储的是查询语句,占用极少的存储空间,减少数据冗余
- 视图相当于在用户和实际的数据表之间加了一层虚拟表,具有隔离性和访问限制功能。
缺点
- 如果实际数据表的结构变更了,我们就需要及时对相关的视图进行相应的维护。维护成本高。
七、什么是存储过程
一组经过预先编译的 SQL 语句的封装。
存储过程预先存储在 MySQL 服务器上,需要执行的时候,客户端只需要向服务器端发出调用存储过程的命令,服务器端就可以把预先存储好的这一系列 SQL 语句全部执行。
优点
- 重用性:提高了sql语句的重用性
- 高效性:减少操作过程中的失误,提高效率
- 传输性:减少网络传输量(客户端不需要把所有的 SQL 语句通过网络发给服务器)
- 安全性:减少了 SQL 语句暴露在网上的风险,也提高了数据查询的安全性
缺点
- 可移植性差
- 调试困难
- 不适合高并发的场景。高并发的场景需要减少数据库的压力,有时数据库会采用分库分表的方式,而且对可扩展性要求很高,在这种情况下,存储过程会变得难以维护, 增加数据库的压力,显然就不适用了。
和视图的对比:
相同点:
- 和视图有着同样的优点,清晰、安全,还可以减少网络传输量。
不同点:
- 视图是虚拟表,通常不对底层数据表直接操作,
- 而存储过程是程序化的 SQL,可以直接操作底层数据表,相比于面向集
合的操作方式,能够实现一些更复杂的数据处理。
和函数的对比:
存储过程是没有返回值
八、创建存储过程
DELIMITER $
CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,...)
[characteristics ...]
BEGIN
sql语句1;
sql语句2;
END $
1、参数前面的符号的意思
- IN :当前参数为输入参数,也就是表示入参;
存储过程只是读取这个参数的值。如果没有定义参数种类, 默认就是 IN ,表示输入参数。
- OUT :当前参数为输出参数,也就是表示出参;
执行完成之后,调用这个存储过程的客户端或者应用程序就可以读取这个参数返回的值了。
- INOUT :当前参数既可以为输入参数,也可以为输出参数。
2、形参类型可以是 MySQL数据库中的任意类型。
3、characteristics 表示创建存储过程时指定的对存储过程的约束条件
九、调用存储过程
CALL 存储过程名(实参列表)