视图
视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,可以将该结果集当做表来使用。
使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用
-- 1.视图是一个虚拟表(非正式存在),其本质是其本质是 -- 【根据SQL语句获取动态的数据集,并为其命名】, -- 用户使用时只需使用【名称】即可获取结果集, -- 可以将该结果集当做表来使用。 -- 2. -- 有了视图以后你是不是觉得写sql语句就很简单了,但是你尽量不要这样做 -- 因为mysql是DBA管着呢,那么你告诉DBA建一堆视图,你写程序的时候是方便了, -- 但是你要是修改呢,那么你就得修改视图了,你就得找到DBA修改你的视图了, -- 那么这样联系别人会很麻烦的。说不定人家还很忙呢。还是推荐自己去写sql语句。 -- #注意: -- 如果是一个单表的就可以修改或者删除或者插入 -- 如果是几个表关联的时候是不可以删除或者插入的,有的可以进行修改操作,有的不可以进行修改)
准备表
======================== 创建部门表 create table dep( id int primary key auto_increment, name char(32) ); 创建用户表 create table user( id int primary key auto_increment, name char(32), dep_id int, foreign key(dep_id) references dep(id) ); 插数据 insert into dep(name) values('外交部'),('销售'),('财经部'); insert into user(name,dep_id) values ('egon',1), ('alex',2), ('haiyan',3);
1.创建视图
创建视图语法
CREATE VIEW 视图名称 AS SQL语句
create view teacher_view as select tid from teacher where tname='李平老师';
#连表 select * from dep left join user on dep.id = user.dep_id; #创建一个视图 create view user_dep_view as select dep.id depid ,user.id uid ,user.name uname,dep.name depname from dep left join user on dep.id = user.dep_id; -- 这样创建一个视图以后就可以吧一个虚拟表保存下来,就可以查看了。 select uname from user_dep_view where depid = 3; -- 我的电脑上不可以增删改,只可查看。但是有的电脑上又可以增删改,可能是跟版本有关吧 #测试 insert into user_dep_view VALUES (1,2,'egon','人文部'); #会报错 DELETE from user_dep_view where uid = 1; #会报错 update user_dep_view set uname = '海燕' where depid = 2; #会报错
-- 对于单表来说是可以修改的,并且原来表的也就更改了。 -- 但是一般还是不要这样改。视图大多数是用来查看的
#建表 CREATE TABLE t1( id int PRIMARY KEY auto_increment, name CHAR(10) ); #插入数据 insert into t1 VALUES (1,'egon'), (2,'daa'), (3,'eef'); #创建视图 CREATE view t1_view as select * from t1; #测试创建视图以后还能不能增删改查 select * from t1_view; update t1_view set name = '海燕' where id = 2; #可以修改(而且原来表的记录也修改了) INSERT into t1_view values(4,'aaa'); #可以插入(同上) delete from t1_view where id=3;#同上
2.修改视图
语法:ALTER VIEW 视图名称 AS SQL语句
3.删除视图
语法:DROP VIEW 视图名称