视图

视图是一个虚拟表(非真实存在),其本质是【根据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 视图名称