亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

【原】mysql 視圖

系統 2517 0
從為知筆記粘過來格式不太對,沒有修改了
視圖是從一個或者多個表中導出來的表,是一種虛擬存在的表,視圖就像一個窗口,通過它可以看到系統專門提供的數據。
視圖可以使用戶的操作方便,保證并且數據庫系統的安全。
?
內容:
視圖的作用
創建視圖
查看視圖
修改視圖
更新視圖
刪除視圖
?

視圖簡介

視圖從已經存在的表中導出,還可以從已經存在的視圖導出,數據庫只保存視圖的定義,而沒有存放視圖的數據。視圖的數據還是保存在原來的表中。視圖的數據依賴于原來的表,一旦原來的表發生改變,視圖的數據也相應變化。
?
如果需要經常查詢多個表的制定字段的數據,可以在這些表上建立一個視圖
?
MySQL的視圖不支持輸入參數的功能。
?
視圖的作用:可以起到篩選器的作用,那些對用戶沒有用或者用戶沒有權限了解的信息可以直接屏蔽掉,歸納為:
使操作簡化,增加數據的安全性,提高表的邏輯獨立性
?

創建視圖

mysql通過create view實現創建視圖,語法:
create [algorithm = {undifined|merge|temptable}] view view_name [(properties)] as select * [ with [ CASCADED | LOCAL ] check option ];
?
解析:
algorithm是可選參數,表示視圖選擇的算法,undefined表示mysql自動選擇算法,merge表示將使用視圖的語句與視圖定義合并,使視圖的定義部分取代語句的對應部分,temptable表示視圖的結構保存到臨時表,然后使用臨時表執行語句。
view_name表示要創建的視圖的名字。
properties是可選參數,指定視圖中各屬性的名詞,默認與select中查詢的相同。
select是一個完整的查詢語句從某個表中查詢某些滿足條件的記錄并導入視圖中。
with check option是可選參數,表示更新視圖是要保證在視圖的權限范圍之內。
?
最好使用with cascaded check option參數
?
權限查詢:在mysql數據庫的user表中保存著權限信息,使用如下語句查詢
select select_priv, create_view_priv from mysql. user whrer user = 'username' ;
其中‘username’是數據庫用戶的用戶名。
查詢結果:
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)
?
在單表創建視圖:
?
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)
?
在多表上建立視圖
在多表創建視圖類似單表操作,只在select語句使用多表查詢即可。

查看視圖

1:使用desc語句
2:show table status語句查詢視圖基本信息。
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
?
這條語句用于查看表信息:
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)
?
從上面兩個查詢結構可以直觀看出視圖和表的區別。
雖然show table status可以查看視圖的基本信息,但是不推薦使用,因為能提供的信息太少。
?
3.show create view語句查看視圖信息
?
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表中查看視圖的詳細信息。
select * from information_schema.views \ G ;
?
information_schema是mysql自帶的一個數據庫。查詢結果如下:
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語句與alter語句修改
?
1.create or replace view
語法:
create or replace [algorithm = {undefined|merge|temptable}] view view_name [(propertise)] as selecte * [ with [ cascaded | local ] check option ];
?
有點像create view,create or replace在視圖不存在的情況下創建視圖,視圖已存在則修改視圖。
?
2.alter語句
?
alter [algorithm = {undefined|merge|temptable}] view view_name [(propertise)] as selecte * [ with [ cascaded | local ] check option ];
參數和create view相同。
?

更新視圖

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

刪除視圖

刪除視圖時只刪除視圖的定義,而不刪除視圖源表的數據。
語法:
drop view [if exits] view_name_list [ restrict |cascad];
解析:
if exits判斷視圖是否存在,存在則執行刪除,不存在則不執行。
可以一次刪除多個視圖。
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
?
刪除視圖需要權限允許。查看是否有刪除權限的命令:
select Drop_priv from mysql. user where user = 'username' ;
?
結果為:
mysql > select drop_priv from mysql. user where user = 'root' ;
+ -----------+
| drop_priv |
+ -----------+
| Y |
| Y |
+ -----------+
2 rows in set ( 0 .00 sec)
< >

【原】mysql 視圖


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 99热免费观看 | 狠狠色丁香久久婷婷综合丁香 | 欧美胖老妇 | 亚洲欧美日韩精品久久 | 亚洲欧美中文字幕专区 | 久久香蕉国产精品一区二区三 | 国产精品揄拍100视频 | 日本不卡视频在线播放 | 国偷盗摄自产福利一区在线 | 日本黄黄| 爱爱免费播放视频在线观看 | 国产成a人亚洲精v品久久网 | 尹人在线视频 | 在线 亚洲 欧美 | 久久免费精品视频在线观看 | jizzjizz亚洲女人 | 久操视频网站 | 国外成人在线视频 | 成人毛片免费免费 | 在线精品国产第一页 | 欧洲色片 | 欧美αv | 欧美特级毛片 | 亚洲悠悠色综合中文字幕 | 人人爱天天做夜夜爽2020麻豆 | 久久国产精品男女热播 | 日本免费的一级绿象 | 在线看的毛片 | 亚洲激情网址 | 色香欲综合成人免费视频 | 亚洲激情网站 | 成人性色生活片免费看爆迷你毛片 | 青青青爽视频在线观看 | 久草观看视频 | 天天亚洲综合 | 中文欧美日韩 | 999视频在线播放777 | 综合国产 | 99视频99| 久久频精品99香蕉国产 | 免费精品国产自产拍观看 |