MySQL VIEW(视图)学习笔记

视图就是存储下来的SQL SELECT语句,也可以说是虚拟的表(在MySQL中视图被当着表来用)。这些数据可以是从一个或几个基本表(或视图)的数据。也可以是用户自已定义的数据。其实视图里面不存放数据的,数据还是放在基本表里面,基本表里面的数据发生变动时,视图里面的数据随之变动

视图的作用:

■视图可以让查询变得很清楚:

如果您要找的数据存放在三张关系表里面,查看数据的时候,你就要写个联合查询了。换种方法,我把联合查询的数据放到视图里面,这样查询起来是不是更方便呢?

■保护数据库的重要数据,给不同的人看不同的数据:

假如您让别人帮您开发一套系统,但是你又想把真正表的暴露出来,这个时候视图是不是最好的选择呢?

视图的类型:

mysql的视图有三种类型:MERGE、TEMPTABLE、UNDEFINED。如果没有ALGORITHM子句,默认算法是UNDEFINED(未定义的)。算法会影响MySQL处理视图的方式。

1,MERGE,会将引用视图的语句的文本与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。

2,TEMPTABLE,视图的结果将被置于临时表中,然后使用它执行语句。

3,UNDEFINED,MySQL将选择所要使用的算法。如果可能,它倾向于MERGE而不是TEMPTABLE,这是因为MERGE通常更有效,而且如果使用了临时表,视图是不可更新的。

二、创建、删除视图:

创建视图基本语法,代码如下:

  1. CREATE
  2. VIEWview_name[(column_list)]
  3. ASselect_statement
  4. [WITH[CASCADED|LOCAL]CHECKOPTION]
  5. mysql>CREATEVIEWscASSELECTs.Name,c.CnameFROMstudentsASsRIGHTJOINcoursesAScONs.CID1=c.CID;
  6. QueryOK,0rowsaffected(0.07sec)
  7. mysql>SHOWTABLES;
  8. +------------------+
  9. |Tables_in_jiaowu|
  10. +------------------+
  11. |courses|
  12. |sc|
  13. |scores|
  14. |students|
  15. |tutors|
  16. +------------------+
  17. 5rowsinset(0.01sec)
  18. mysql>SELECT*FROMsc;
  19. +--------------+------------------+
  20. |Name|Cname|
  21. +--------------+------------------+
  22. |GuoJing|TaiJiquan|
  23. |YangGuo|TaiJiquan|
  24. |DingDian|Qishangquan|
  25. |HuFei|Wanliduxing|
  26. |HuangRong|Qianzhuwandushou|
  27. |YueLingshang|Wanliduxing|
  28. |ZhangWuji|Hamagong|
  29. |Xuzhu|TaiJiquan|
  30. |NULL|Yiyangzhi|
  31. |NULL|Jinshejianfa|
  32. |NULL|Qiankundanuoyi|
  33. |NULL|Pixiejianfa|
  34. |NULL|Jiuyinbaiguzhua|
  35. +--------------+------------------+
  36. 13rowsinset(0.02sec)

删除视图基本语法,代码如下:

  1. DROPVIEW[IFEXISTS]
  2. view_name[,view_name]...
  3. [RESTRICT|CASCADE]
  4. mysql>DROPVIEWIFEXISTSsc;
  5. QueryOK,0rowsaffected(0.01sec)

查看视图创建过程,代码如下:

  1. mysql>SHOWCREATEVIEWscG
  2. ***************************1.row***************************
  3. View:sc
  4. CreateView:CREATEALGORITHM=UNDEFINEDDEFINER=`root`@`localhost`SQLSECURITYDEFINERVIEW`sc`ASselect`s`.`Name`AS`Name`,`c`.`Cname`AS`Cname`from(`courses``c`leftjoin`students``s`on((`s`.`CID1`=`c`.`CID`))) //phpfensi.com
  5. character_set_client:utf8
  6. collation_connection:utf8_general_ci
  7. 1rowinset(0.00sec)

三、在MySQL中使用视图的注意事项:

(1) 运行创建视图的语句需要用户具有创建视图(crate view)的权限,若加了[or replace]时,还需要用户具有删除视图(drop view)的权限;

(2) select语句不能包含from子句中的子查询;

(3) select语句不能引用系统或用户变量;

(4) select语句不能引用预处理语句参数;

(5) 在存储子程序内,定义不能引用子程序参数或局部变量;

(6)在定义中引用的表或视图必须存在,但是,创建了MySQL视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用check table语句;

(7) 在定义中不能引用temporary表,不能创建temporary视图;

(8) 在视图定义中命名的表必须已存在;

(9) 不能将触发程序与视图关联在一起;

(10) 在视图定义中允许使用order by,但是,如果从特定视图进行了选择,而该视图使用了具有自己order by的语句,它将被忽略.

(11)MySQL视图不支持雾化,即将视图保持为实际的数据,也不能创建索引,因此效率较低.

相关广告
  • MySQL VIEW(视图)学习笔记 MySQL VIEW(视图)学习笔记 MySQL VIEW(视图)学习笔记
相关阅读

MySQL VIEW(视图)学习笔记

2019/10/10 17:37:03 | 谷歌SEO算法 | 发外链