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”修改多個基表

八.視圖的實質

虛擬表


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM