mysql视图的创建、基本操作、作用

一.mysql视图的创建

作用:提高了重用性,就像一个函数。如果要频繁获取user的name和goods的name。就应该使用以下sql语言。示例:

先创建3张表

1.1user表

1.2goods表

 1.3ug表,比如某某人有哪些食物

 

1.4创建视图  目的:查询某人有某食物

create view 视图名称 as 普通的查询语句;

create view other as select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id;

利用navicat创建视图

右键新建视图:

SELECT
PK_SR_MAIN AS pk_id,
wthdbj AS wthdbj,
HDTHYY AS hdthyy,
MDJLX AS mdjlx,
FK_HDGL_ID AS fk_hdgl_id,
'sr_main' AS tname,
SYS_XZQH AS sys_xzqh,
SYS_BMID AS sys_bmid,
'0' AS type,
msyhd AS msyhd,
mgshd AS mgshd,
gs_hdthyy AS gs_hdthyy,
fk_gs_hdgl_id AS fk_gs_hdgl_id
FROM
sr_main a,sr_dbbz b
WHERE substr(a.sys_xzqh,1,6) = b.sjid and mdjlx = b.sdjlx and replace(a.MJTHKXZ,'0','') = b.syj7 and a.SYS_SPZT = 99 and mdjlx in ('db_jz','kn_jz','wb_jz') AND a.SYS_SCBJ = 0 and b.sys_scbj = 0 AND b.bz_str1 = '1'

UNION ALL

SELECT
PK_SR_MAIN AS pk_id,
wthdbj AS wthdbj,
HDTHYY AS hdthyy,
MDJLX AS mdjlx,
FK_HDGL_ID AS fk_hdgl_id,
'sr_main' AS tname,
SYS_XZQH AS sys_xzqh,
SYS_BMID AS sys_bmid,
'0' AS type,
msyhd AS msyhd,
mgshd AS mgshd,
gs_hdthyy AS gs_hdthyy,
fk_gs_hdgl_id AS fk_gs_hdgl_id
FROM
sr_main
WHERE SYS_SPZT = 99 and mdjlx in ('ls_jz','yl_jz') AND SYS_SCBJ = 0

UNION ALL
SELECT
PK_SR_MAIN AS pk_id,
wthdbj AS wthdbj,
HDTHYY AS hdthyy,
MDJLX AS mdjlx,
FK_HDGL_ID AS fk_hdgl_id,
'sr_main_bg' AS tname,
SYS_XZQH AS sys_xzqh,
SYS_BMID AS sys_bmid,
'1' AS type,
msyhd AS msyhd,
mgshd AS mgshd,
gs_hdthyy AS gs_hdthyy,
fk_gs_hdgl_id AS fk_gs_hdgl_id
FROM
sr_main_bg a,sr_dbbz b
WHERE substr(a.sys_xzqh,1,6) = b.sjid and replace(mdjlx,'_bg','_jz') = b.sdjlx and replace(a.MJTHKXZ,'0','') = b.syj7 and a.SYS_SPZT = 99 and mdjlx in ('db_bg','kn_bg','wb_bg') AND a.SYS_SCBJ = 0 and b.sys_scbj = 0 AND b.bz_str1 = '1'

然后保存,输入视图名称 如:tcc_view_demo

1.5查询视图

select * from other;

 

二:

    对数据库重构,却不影响程序的运行。假如因为某种需求,需要将user拆房表usera和表userb,该两张表的结构如下:

        测试表:usera有id,name,age字段

        测试表:userb有id,name,sex字段

    这时如果php端使用sql语句:select * from user;那就会提示该表不存在,这时该如何解决呢。解决方案:创建视图。以下sql语句创建视图:

        create view user as select a.name,a.age,b.sex from usera as a, userb as b where a.name=b.name;

        以上假设name都是唯一的。此时php端使用sql语句:select * from user;就不会报错什么的。这就实现了更改数据库结构,不更改脚本程序的功能了。

三:

    提高了安全性能,权限设置。可以对不同的用户,设定不同的视图。例如:某用户只能获取user表的name和age数据,不能获取sex数据。则可以这样创建视图。示例如下:

        create view other as select a.name, a.age from user as a;

    这样的话,使用sql语句:select * from other; 最多就只能获取name和age的数据,其他的数据就获取不了了。

四:

    让数据更加清晰。想要什么样的数据,就创建什么样的视图。经过以上三条作用的解析,这条作用应该很容易理解了吧

五.查询mysql有多少视图

show table  status  where  comment ='view';

六.如何删除视图

drop view视图名称;

七.对视图的dml操作

7.1增删改(dml):只能是单表操作

INSERT INTO other (username , goodsname) VALUES ("张三" , "苹果");

报错:> 1393 - Can not modify more than one base table through a join view 'test.other'

原因:无法通过联接视图“test.other”修改多个基表

八.视图的实质

虚拟表

原文地址:https://www.cnblogs.com/tongcc/p/11454282.html