文章目录
视图
/*
含义:一种虚拟存在的虚拟表和普通表一样使用。是通过表动态生成的数据
应用场景:
多个地方用到同样的查询结果
该查询结果使用的sql语句比较复杂。
保护数据,提高数据的安全性。
*/
创建视图
/*
例句:
create view 视图名称
as
查询sql语句。
*/
create view v1
as
select name,id from `user`;
select * from v1 where name like "胡%";
视图的修改
/*
方式一: create or replace: 视图名称存在就修改,不存在再创建。
create or replace view 视图名称
as
查询sql语句;
*/
create or replace view v1
as
select name,id,sex,`date` from `user`;
/*
方式二:
alter view 视图名称
as
查询sql语句
*/
alter view v1
as
select name,id,sex,`date`,type from `user`;
视图的删除
/*
drop view 视图名称,视图名称,视图名称,.....;
*/
drop view v1,v2,v3,...;
视图的查看
/*
方式一: 建议在客户端使用
desc 视图名称;
*/
desc v1; # 视图的表结构
/*
方式二: 建议在CMD使用
show create view 视图名称;
*/
show create view v1; # 详细的视图创建过程
视图的更新(更新视图中的数据)
create table book(
id int , #编号
bName varchar(20), #图书名
price double, #价格
authorId int, #作者编号
publishDate datetime #出版日期
)
/*
insert into 视图名称 values();
*/
create view bookview_1
as
select id,bName,price from book;
insert into bookview_1 values(1,"《修炼》",10.85); #成功 会在原始表和视图中插入这几个字段数据,其他字段为null
create view bookview_2
as
select id,bName,price*2 from book;
insert into bookview_2 values(1,"《修炼》",10.85); #失败 原因是视图中price字段做了计算
/*
update 视图名称 set 视图中的字段名 = 值 where 条件;
*/
create view bookview
as
select id,bName,price from book;
update bookview set bName = "《坏蛋》" where id = 1; #成功 会在原始表和视图中修改这个字段数据。
/*
delete from 视图名称 where 条件;
*/
create view bookview
as
select id,bName,price from book;
delete from bookview where id = 1; #成功 会在原始表和视图中删除这条数据。
视图不允许更新的条件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vCGWXI68-1609926959070)(D:\Desktop\学习\mysql\Mysql复习.assets\image-20201203145050099.png)]
/*
from一个不能更新的视图。
*/
create view v2
as
select * from v1; # 这个的情况是不能更新 v2 的
视图和表的对比
/*
创建语法关键字 是否实际占用物理空间 使用
视图 create view 只是保存了sql逻辑 CURD 一般不轻易CURD
表 create table 保存了数据 CURD
*/