什么是视图view?
视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。简单的来说视图是由其定义结果组成的表。也就是说视图是由sql语句查询出来的结果组合成的一个表。
创建视图
create view 视图名 as select(...);
例如:
create view v_demoview as SELECT UserName,d.DepartName,r.RoleName,m.title,m.content,m.tousername,m.flag
from userinfo u
LEFT JOIN (SELECT DepartId,DepartName from departinfo
) d on u.DepartId = d.DepartId
LEFT JOIN(
SELECT RoleId,RoleName from roleinfo
)r on u.RoleId = r.RoleId
LEFT JOIN (
select m1.title,m1.content,m1.fromuserid,(SELECT UserName from userinfo where userid = r1.userid) as tousername,r1.flag from message m1 LEFT JOIN readcommonmessage r1
on m1.messageid = r1.messageid
)m on m.fromuserid = u.UserId
这就是一个创建好的视图。
这就是这个视图里面的内容,也是一个表结构,跟表差不多,但是跟真正的表又有所差别,具体什么差别请自行百度。
从里面的内容可以看出,这个视图里面存储的就是我们select查询出来的结果。
修改视图
create or REPLACE view v_demoview as
SELECT UserName,d.DepartName,r.RoleName,m.title,m.content,m.tousername,m.flag from userinfo u
LEFT JOIN (SELECT DepartId,DepartName from departinfo
) d on u.DepartId = d.DepartId
LEFT JOIN(
SELECT RoleId,RoleName from roleinfo
)r on u.RoleId = r.RoleId
LEFT JOIN (
select m1.title,m1.content,m1.fromuserid,(SELECT UserName from userinfo where userid = r1.userid) as tousername,r1.flag from message m1 LEFT JOIN readcommonmessage r1
on m1.messageid = r1.messageid
)m on m.fromuserid = u.UserId
where u.UserId = 1
内容:
视图的使用:
视图在结构上跟表是一样的,所以在使用上跟表示差不多的。
select * from v_demoview
结果:
select * from v_usermessage where UserName = 'admin'