深圳全飞鸿

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 588|回复: 0
打印 上一主题 下一主题

MYSQL 创建视图 VIEW

[复制链接]

800

主题

1379

帖子

7712

积分

版主

Rank: 7Rank: 7Rank: 7

积分
7712
跳转到指定楼层
楼主
发表于 2019-11-7 14:44:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创建视图
  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,可以查询到基表的内容。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|nagomes  

GMT+8, 2025-5-7 09:03 , Processed in 0.057316 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表