mysql视图和存储过程

什么是视图

视图是一张虚拟存在的表,它本身并不包含数据,相当于一个select语句的查询结果集,视图可以用于代替查询,当需要多次使用同一个查询语句时,可以为此查询创建一个视图,方便后续使用。

视图的优点

  1. 简单
    能够简化查询,用户只关心数据,而不用关心表与表之间的连接操作。视图能够面向结果。
  2. 安全
    可以对不同的用户,设定不同的视图,视图可以单独设置权限,有些表中的某些数据是不方便给用户看的,视图能使用户只看到表中的部分数据,而没办法看到表中的全部数据和表的结构以及表与表之间的联系,相当于起到一个封装和保密的作用。
  3. 数据独立
    一旦视图的结构确定了,原表中其他数据的修改很难影响到视图,这样可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;而当源表修改或者删除了视图中所涉及的字段或属性值,则可以通过修改视图来解决,不会造成对访问者的影响。

下面我们通过一个示例来熟悉视图的使用

视图的使用

查看已有的学生表

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存储引擎这本书。

猜你喜欢

转载自blog.csdn.net/weixin_42494845/article/details/105915588