什么是视图
视图是一张虚拟存在的表,它本身并不包含数据,相当于一个select
语句的查询结果集,视图可以用于代替查询,当需要多次使用同一个查询语句时,可以为此查询创建一个视图,方便后续使用。
视图的优点
- 简单
能够简化查询,用户只关心数据,而不用关心表与表之间的连接操作。视图能够面向结果。 - 安全
可以对不同的用户,设定不同的视图,视图可以单独设置权限,有些表中的某些数据是不方便给用户看的,视图能使用户只看到表中的部分数据,而没办法看到表中的全部数据和表的结构以及表与表之间的联系,相当于起到一个封装和保密的作用。 - 数据独立
一旦视图的结构确定了,原表中其他数据的修改很难影响到视图,这样可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;而当源表修改或者删除了视图中所涉及的字段或属性值,则可以通过修改视图来解决,不会造成对访问者的影响。
下面我们通过一个示例来熟悉视图的使用
视图的使用
查看已有的学生表
select * from student;
将jack的年龄修改为23
update student set age=23 where id=5;
创建一个成绩表,外键关联学生表
create table achievement_tb(a_id int primary key auto_increment,s_id int,score float not null,foreign key(s_id) references student(id));
插入每个学生对应的成绩
insert into achievement_tb values(null,5,84),(null,6,79),(null,7,91),(null,9,88);
查看成绩
select * from achievement_tb;
如果想要连接两张表查看全部的信息我们一般会用到内连接
select name as 名字,sex as 性别,age as 年龄, score as 分数 from student inner join achievement_tb on id=s_id;
但是每次查询都要敲这么多命令是不是很不方便啊,这时候视图就派上用场了。
创建视图
create view s_and_a as (select name as 名字,sex as 性别,age as 年龄, score as 分数 from student inner join achievement_tb on id=s_id);
使用视图
select * from s_and_a;
查看视图
show tables;
修改视图
alter view 视图名 as 查询语句; # 将视图更改为其他查询
删除视图
drop view 视图名
同样,我们在插入数据的时候,也要敲很多代码,这时候为了简化就可以使用存储过程。
什么是存储过程
存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。存储过程是用于简化开发人员的工作,减少数据在数据库和应用服务器之间传输,提高处理效率的。
存储过程:参数的传递(参数类型)用 IN 、 OUT 、 INOUT ,并且没有直接的返回值。
- IN 表示数据传入
- OUT 表示数据传出
- INOUT 表示既可以传入又可以传出
存储过程的使用
delimiter
MySQL执行的过程中,会以 ; 作为结束命令
delimiter 是一个编译器指令,告诉MySQL解释器,MySQL是否可以执行了,该段命令是否已经结束了
delimiter 指令的使用
#将结束符变成%
delimiter %
#存储过程
逻辑代码 %
#结束符重新变成 ;
delimiter ;
delimiter %
改变了结束符
写完逻辑代码后需要 // 结束。
最后再用delimiter ;
将结束符改回来。
创建存储过程
delimiter %
create procedure in_data(in name varchar(20),in sex enum("male","female"),in age int) begin insert into student value(null ,name,sex,age); end;%
delimiter ;
使用存储过程
通过call 存储过程名();
来调用
call in_data("rose","female",27);
然后查看学生表
select * from student;
可以看到数据已经成功插入,相比于直接插入,使用存储过程就方便多了。
查看存储过程
show create procedure 存储过程名
修改存储过程
alter procedure 存储过程名;
删除存储过程
drop procedure 存储过程名
结语
这篇文章给大家介绍了视图和存储过程的使用,它们能够为我们为我们的增删改查提供一定的便利,希望大家能够熟悉它们的使用。
数据库是一个很庞大的知识体系,光会简单的SQL语句是没用的,大家需要深入学习,了解数据库的底层原理,只有理解了数据库的执行原理(比如了解数据库存储引擎的工作原理),才能更好的进行性能优化(比如设置脏页的刷新率,设置缓冲池的大小,设置多个缓冲池实例,设置重做日志缓冲的刷新率等等)。
如果大家感兴趣的话可以阅读mysql技术内幕-innoDB存储引擎这本书。