[MySQL光速入门]028 聊聊视图

本文深入探讨了MySQL中视图的概念与应用,包括视图的创建、查询、修改及删除等操作。通过实例演示了如何利用视图简化复杂查询,实现数据分级管理,以及视图在代码复用和数据隔离方面的优势。

什么是视图

有结构没结果的临时表

  • 有结构意味着, 视图是一个有行有列的二维表
  • 没结果意味着, 视图中并没有真实存放的数据
  • 视图中的数据, 从基表中获取

视图就是一个零库存的经销商

视图的优点

  • 可以复用代码, 节省SQL语句, 以后可以直接操作视图
  • 可以隔离表结构, 隐藏关键数据, 只向外提供必要的数据
  • 视图主要针对查询, 删除视图, 不会影响数据
  • 视图可以把数据分级, 不同的权限, 给不同的视图(数据)

创建

创建视图之前, 我们需要一些测试数据

drop database if exists new_library;
create database new_library CHARACTER set utf8;
use new_library;

drop table if exists readertype;

create table readertype(
	retypeid int not null primary key,
	typename VARCHAR(20) not null,
	borrowquantity int not null,
	borrowday int
);

drop table if exists reader;

create table reader(
	readerid char(10) not null PRIMARY key,
	readername VARCHAR(20) not null,
	readerpass VARCHAR(20) not null,
	retypeid int,
	readerdate datetime,
	readerstatus VARCHAR(4),
	FOREIGN key(retypeid) REFERENCES readertype(retypeid)
);

insert into readertype values
	(1,'学生',10,30),
	(2,'教师',20,60),
	(3,'管理员',15,30),
	(4,'职工',15,20);

insert into reader values
	('0016','苏小东','123456',1,'1999-9-9','有效'),
	('0017','张明','123456',1,'2010-9-10','有效'),
	('0018','梁君红','123456',1,'2010-9-10','有效'),
	('0021','赵清远','123456',2,'2010-7-1','有效'),
	('0034','李瑞清','123456',3,'2009-8-3','有效'),
	('0042','张明月','123456',4,'1997-4-23','有效');
复制代码

创建一个视图, 用来查询读者的详细信息, 包括用户id, 姓名, 类别名称, 借书数量

如果不使用视图, 我们可以使用连表查询

有了视图, 我们就可以把复杂的查询放入视图之中

drop view if exists reader_detail;

create view reader_detail as 
select 
	readerid,readername,typename,borrowquantity 
from 
	reader,readertype 
where 
	reader.retypeid = readertype.retypeid;
复制代码

查看视图

因为视图是一张虚拟表, 所有查看表的命令, 视图都能用

show tables;
desc reader_detail;
show create table reader_detail;
复制代码

既然视图是临时表, 那必然会有结构文件.frm

使用视图

像表一样查询数据即可

修改视图

可以使用alter 在原有视图的基础上, 加入字段读者状态

也可以使用create or replace 在另一个视图中, 增加读者姓名字段

删除视图

drop view 视图名称; -- 不能使用table
复制代码

也可以一次删除多个

drop view 视图1, 视图2....;
复制代码

视图重命名

rename table 原来的名字 to 新名字;
复制代码

视图中的数据, 可以增删改吗?

可以, 但是不推荐这么做, 视图主要是查询数据时使用

因为不能操作多表, 所以我们新建一个单表的视图

drop view if exists select_reader;

create view select_reader as select readerid,readername from reader;
复制代码

视图进行insert操作

向视图中插入一条数据

insert into select_reader values(123,'LUCY');
复制代码

视图进行update操作

注意with check option

视图进行delete操作

快速跳转

转载于:https://juejin.im/post/5cb80fca518825327c24dc2c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值