深圳全飞鸿

标题: MYSQL 创建视图 VIEW [打印本页]

作者: zhgc    时间: 2019-11-7 14:44
标题: MYSQL 创建视图 VIEW
创建视图
  1. CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
  2.     VIEW view_name [(column_list)]
  3.     AS select_statement
  4.    [WITH [CASCADED | LOCAL] CHECK OPTION]
复制代码
ALGORITHM:表示视图选择算法,默认算法是UNDEFINED(未定义的):MySQL自动选择要使用的算法 ;merge合并;temptable临时表
定义视图时的其他选项
CREATE [OR REPLACE]     [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]    [DEFINER = { user | CURRENT_USER }]  
  [SQL SECURITY { DEFINER | INVOKER }]VIEW view_name [(column_list)]  AS select_statement    [WITH [CASCADED | LOCAL] CHECK OPTION]

1、ALGORITHM选项:选择在处理定义视图的select语句中使用的方法
  ①UNDEFINED:MySQL将自动选择所要使用的算法
  ②MERGE:将视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分
  ③TEMPTABLE:将视图的结果存入临时表,然后使用临时表执行语句
缺省ALGORITHM选项等同于ALGORITHM = UNDEFINED

2、DEFINER选项:指出谁是视图的创建者或定义者
  ①definer= '用户名'@'登录主机'
  ②如果不指定该选项,则创建视图的用户就是定义者,指定关键字CURRENT_USER(当前用户)和不指定该选项效果相同

3、SQL SECURITY选项:要查询一个视图,首先必须要具有对视图的select权限。
  但是,如果同一个用户对于视图所访问的表没有select权限,那会怎么样?
SQL SECURITY选项决定执行的结果:
  ①SQL SECURITY DEFINER:定义(创建)视图的用户必须对视图所访问的表具有select权限,也就是说将来其他用户访问表的时候以定义者的身份,此时其他用户并没有访问权限。
  ②SQL SECURITY INVOKER:访问视图的用户必须对视图所访问的表具有select权限。
缺省SQL SECURITY选项等同于SQL SECURITY DEFINER 
视图权限总结:
  使用root用户定义一个视图(推荐使用第一种):u1、u2
    1)u1作为定义者定义一个视图,u1对基表有select权限,u2对视图有访问权限:u2是以定义者的身份访问可以查询到基表的内容;
    2)u1作为定义者定义一个视图,u1对基表没有select权限,u2对视图有访问权限,u2对基表有select权限:u2访问视图的时候是以调用者的身份,此时调用者是u2,可以查询到基表的内容。






欢迎光临 深圳全飞鸿 (http://www.nagomes.com/disc/) Powered by Discuz! X3.2