视图(view):是一种有结构,但是没结果的虚拟表
创建视图
基本语法:create view 视图名字 as select 语句;
创建单表视图:基表只有一个
创建多表视图:基表来源至少两个
视图:单表和多表
create view my_v1 as
select * from my_student;
create view my_v2 as
select * from my_class;
create view my_v3 as
select * from my_student as a left join my_class as
c on s.c_id=c.id;-- 错误,id重复
多表
create view my_v3 as
select s.*,c.c_name,c.room from my_student as s
join my_class as c on s.c_id=c.id;
查看视图
show tables [like] / desc 视图名 / show create table 视图名;
-- c查看视图创建语句
show create view my_v3\G(\G横向查看)
修改视图
alter view 视图名字 as 新的select语句;
alter view my_v1 as
select id,name,age,sex,height,c_id from my_student;
删除视图
drop view 视图名字;
drop view my_v4;
视图数据操作
新增数据
多表视图不能新增数据
可以向单表视图插入数据
insert into my_v2 values(3,'Python1910','A204');
视图中包含的字段必须有基表中所有不能为空、或没有默认值的字段
insert into my_v1 values(null,'陈立农',130,'男',183,3);
视图是可以向基表插入数据的
删除数据
多表视图不能删除数据
delete from my_v3 where id=1;
单表视图可以删除数据
delete from my_v2 where id=4;
更新数据
更新限制:with check option;
多表视图更新数据
update my_v3 set c_id=4 where id=6;
视图:age字段限制更新
create view my_v4 as
select * from my_student where age>30 with check option;
-- 表示视图的数据来源都是年龄大于30的,是由where age>30决定的
-- with chhheck
-- option决定通过视力更新的时候,不能将已经得到的数据age>30的改成<30的
-- 将视图可以查到的数据改成年龄小于30
update my_v4 set age=29 where id=5;
-- 可以修改数据让视图可以查到:可以改,但是无效果
update my_v4 set age=32 where id=3;
视图算法
视图算法:系统对视图以及外部查询视图的select语句的一种解析方式
视图算法分三种
undefined:未定义(默认的)
temptable:临时表算法
merge:合并算法
算法指定:在创建视图的时候create algorithm=指定算法 view 视图名字 as select语句;