小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

視圖詳解

 暖風(fēng)醉伊人 2014-08-14
視圖是從一個(gè)或者多個(gè)表中導(dǎo)出來(lái)的表,是一種虛擬存在的表,視圖就像一個(gè)窗口,通過(guò)它可以看到系統(tǒng)專(zhuān)門(mén)提供的數(shù)據(jù)。
視圖可以使用戶(hù)的操作方便,保證并且數(shù)據(jù)庫(kù)系統(tǒng)的安全。
 
內(nèi)容:
視圖的作用
創(chuàng)建視圖
查看視圖
修改視圖
更新視圖
刪除視圖
 

視圖簡(jiǎn)介

視圖從已經(jīng)存在的表中導(dǎo)出,還可以從已經(jīng)存在的視圖導(dǎo)出,數(shù)據(jù)庫(kù)只保存視圖的定義,而沒(méi)有存放視圖的數(shù)據(jù)。視圖的數(shù)據(jù)還是保存在原來(lái)的表中。視圖的數(shù)據(jù)依賴(lài)于原來(lái)的表,一旦原來(lái)的表發(fā)生改變,視圖的數(shù)據(jù)也相應(yīng)變化。
 
如果需要經(jīng)常查詢(xún)多個(gè)表的制定字段的數(shù)據(jù),可以在這些表上建立一個(gè)視圖
 
MySQL的視圖不支持輸入?yún)?shù)的功能。
 
視圖的作用:可以起到篩選器的作用,那些對(duì)用戶(hù)沒(méi)有用或者用戶(hù)沒(méi)有權(quán)限了解的信息可以直接屏蔽掉,歸納為:
使操作簡(jiǎn)化,增加數(shù)據(jù)的安全性,提高表的邏輯獨(dú)立性
 

創(chuàng)建視圖

mysql通過(guò)create view實(shí)現(xiàn)創(chuàng)建視圖,語(yǔ)法:
create [algorithm={undifined|merge|temptable}] view view_name [(properties)] as select * [with [CASCADED|LOCAL] check option];
 
解析:
algorithm是可選參數(shù),表示視圖選擇的算法,undefined表示mysql自動(dòng)選擇算法,merge表示將使用視圖的語(yǔ)句與視圖定義合并,使視圖的定義部分取代語(yǔ)句的對(duì)應(yīng)部分,temptable表示視圖的結(jié)構(gòu)保存到臨時(shí)表,然后使用臨時(shí)表執(zhí)行語(yǔ)句。
view_name表示要?jiǎng)?chuàng)建的視圖的名字。
properties是可選參數(shù),指定視圖中各屬性的名詞,默認(rèn)與select中查詢(xún)的相同。
select是一個(gè)完整的查詢(xún)語(yǔ)句從某個(gè)表中查詢(xún)某些滿(mǎn)足條件的記錄并導(dǎo)入視圖中。
with check option是可選參數(shù),表示更新視圖是要保證在視圖的權(quán)限范圍之內(nèi)。
 
最好使用with cascaded check option參數(shù)
 
權(quán)限查詢(xún):在mysql數(shù)據(jù)庫(kù)的user表中保存著權(quán)限信息,使用如下語(yǔ)句查詢(xún)
select select_priv, create_view_priv from mysql.user whrer user='username';
其中‘username’是數(shù)據(jù)庫(kù)用戶(hù)的用戶(hù)名。
查詢(xún)結(jié)果:
mysql> select select_priv, create_view_priv from mysql.user where user = 'root';
+-------------+------------------+
| select_priv | create_view_priv |
+-------------+------------------+
| Y | Y |
| Y | Y |
+-------------+------------------+
2 rows in set (0.09 sec)
 
在單表創(chuàng)建視圖:
 
mysql> use login;
Database changed
mysql> select * from login;
+-----+----------+----------------------------------+
| uid | username | password |
+-----+----------+----------------------------------+
| 1 | test | 098f6bcd4621d373cade4e832627b4f6 |
| 2 | test1 | 5a105e8b9d40e1329780d62ea2265d8a |
| 3 | test2 | ad0234829205b9033196ba818f7a872b |
| 4 | user | ee11cbb19052e40b07aac0ca060c23ee |
| 5 | testk | f2fc2720249d97db37e2a5a3330baa4e |
+-----+----------+----------------------------------+
5 rows in set (0.05 sec)

mysql> create view login_view as select * from login where uid >= 2 and uid <=4;
Query OK, 0 rows affected (0.12 sec)

mysql> desc login_view;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| uid | int(11) | NO | | 0 | |
| username | varchar(32) | NO | | NULL | |
| password | varchar(32) | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.07 sec)

mysql> select * from login_view;
+-----+----------+----------------------------------+
| uid | username | password |
+-----+----------+----------------------------------+
| 2 | test1 | 5a105e8b9d40e1329780d62ea2265d8a |
| 3 | test2 | ad0234829205b9033196ba818f7a872b |
| 4 | user | ee11cbb19052e40b07aac0ca060c23ee |
+-----+----------+----------------------------------+
3 rows in set (0.04 sec)
 
在多表上建立視圖
在多表創(chuàng)建視圖類(lèi)似單表操作,只在select語(yǔ)句使用多表查詢(xún)即可。

查看視圖

1:使用desc語(yǔ)句
2:show table status語(yǔ)句查詢(xún)視圖基本信息。
show table status like 'view_name';
 
mysql> show table status like 'login_view' \G;
*************************** 1. row ***************************
Name: login_view
Engine: NULL
Version: NULL
Row_format: NULL
Rows: NULL
Avg_row_length: NULL
Data_length: NULL
Max_data_length: NULL
Index_length: NULL
Data_free: NULL
Auto_increment: NULL
Create_time: NULL
Update_time: NULL
Check_time: NULL
Collation: NULL
Checksum: NULL
Create_options: NULL
Comment: VIEW
 
這條語(yǔ)句用于查看表信息:
mysql> show table status like 'login' \G;
*************************** 1. row ***************************
Name: login
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 5
Avg_row_length: 3276
Data_length: 16384
Max_data_length: 0
Index_length: 16384
Data_free: 7340032
Auto_increment: 6
Create_time: 2012-10-28 18:28:57
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.01 sec)
 
從上面兩個(gè)查詢(xún)結(jié)構(gòu)可以直觀看出視圖和表的區(qū)別。
雖然show table status可以查看視圖的基本信息,但是不推薦使用,因?yàn)槟芴峁┑男畔⑻佟?/code>
 
3.show create view語(yǔ)句查看視圖信息
 
mysql> show create view login_view \G;
*************************** 1. row ***************************
View: login_view
Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIE
W `login_view` AS select `login`.`uid` AS `uid`,`login`.`username` AS `username`,`login`.`password`
AS `password` from `login` where ((`login`.`uid` >= 2) and (`login`.`uid` <= 4))
character_set_client: gbk
collation_connection: gbk_chinese_ci
1 row in set (0.00 sec)
 
4:在view表中查看視圖的詳細(xì)信息。
select * from information_schema.views \G;
 
information_schema是mysql自帶的一個(gè)數(shù)據(jù)庫(kù)。查詢(xún)結(jié)果如下:
mysql> select * from information_schema.views \G;
*************************** 1. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: login
TABLE_NAME: login_view
VIEW_DEFINITION: select `login`.`login`.`uid` AS `uid`,`login`.`login`.`username` AS `username`
,`login`.`login`.`password` AS `password` from `login`.`login` where ((`login`.`login`.`uid` >= 2) a
nd (`login`.`login`.`uid` <= 4))
CHECK_OPTION: NONE
IS_UPDATABLE: YES
DEFINER: root@localhost
SECURITY_TYPE: DEFINER
CHARACTER_SET_CLIENT: gbk
COLLATION_CONNECTION: gbk_chinese_ci
1 row in set (0.10 sec)
 

修改視圖

create or replace view語(yǔ)句與alter語(yǔ)句修改
 
1.create or replace view
語(yǔ)法:
create or replace [algorithm={undefined|merge|temptable}] view view_name [(propertise)] as selecte * [with [cascaded|local] check option];
 
有點(diǎn)像create view,create or replace在視圖不存在的情況下創(chuàng)建視圖,視圖已存在則修改視圖。
 
2.alter語(yǔ)句
 
alter [algorithm={undefined|merge|temptable}] view view_name [(propertise)] as selecte * [with [cascaded|local] check option];
參數(shù)和create view相同。
 

更新視圖

update,注意不要寫(xiě)成updata。
語(yǔ)法:update view_name set property_1=a[, property_2=b..];
 
注意:更新會(huì)修改源表,而不只是修改視圖,因?yàn)橐晥D沒(méi)有存儲(chǔ),實(shí)際操作都是針對(duì)源表。主鍵字段不能update。update會(huì)修改視圖中的所有數(shù)據(jù)。
 
不能更新視圖的情況
  1. 視圖包含sum(),count(),max(),min()等函數(shù)。
  2. 視圖包含union,union all,distinct,group by, having等關(guān)鍵字。
  3. 常量視圖
  4. 創(chuàng)建視圖的select語(yǔ)句包含select子句。
  5. 由不可更新的視圖導(dǎo)出的視圖。//視圖可以繼續(xù)導(dǎo)出視圖。
  6. 創(chuàng)建視圖是algorithm參數(shù)為temptable。
  7. 視圖對(duì)應(yīng)的表上沒(méi)有默認(rèn)值的列,并且該列不再視圖里。
  8. 除此外with check option可能決定視圖鞥否更新。

刪除視圖

刪除視圖時(shí)只刪除視圖的定義,而不刪除視圖源表的數(shù)據(jù)。
語(yǔ)法:
drop view [if exits] view_name_list [restrict|cascad];
解析:
if exits判斷視圖是否存在,存在則執(zhí)行刪除,不存在則不執(zhí)行。
可以一次刪除多個(gè)視圖。
mysql> drop view if exits login_view;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 'exits login_view' at line 1
mysql> drop view if exists login_view;
Query OK, 0 rows affected (0.00 sec)

mysql> desc login_view;
ERROR 1146 (42S02): Table 'login.login_view' doesn't exist
 
刪除視圖需要權(quán)限允許。查看是否有刪除權(quán)限的命令:
select Drop_priv from mysql.user where user='username';
 
結(jié)果為:
mysql> select drop_priv from mysql.user where user = 'root';
+-----------+
| drop_priv |
+-----------+
| Y |
| Y |
+-----------+
2 rows in set (0.00 sec)
<>

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多