深入解析mysql视图_深入解析MySQL视图VIEW(四)

嵌套视图:定义在另一个视图的上面的视图-

mysql> create view v_ear_veterans

-> as

-> select * from v_veterans

-> where JOINED < 1980;

使用WITH CHECK OPTION约束时,(不指定选项则默认是CASCADED)

可以使用CASCADED或者 LOCAL选项指定检查的程度:

WITH CASCADED CHECK OPTION:检查所有的视图.例如:嵌套视图及其底层的视图

WITH LOCAL CHECK OPTION:只检查将要更新的视图本身,对嵌套视图不检查其底层的视图

五、定义视图时的其他选项

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权限,那会怎么样?

04a1acb09597803ecf52c1f32a2beaa7.png

SQL SECURITY选项决定执行的结果:

SQL SECURITY DEFINER:定义(创建)视图的用户必须对视图所访问的表具有select权限,也就是说将来其他用户访问表的时候以定义者的身份,此时其他用户并没有访问权限.

SQL SECURITY INVOKER:访问视图的用户必须对视图所访问的表具有select权限.

缺省SQL SECURITY选项等同于SQL SECURITY DEFINER

视图权限总结:

使用root用户定义一个视图(推荐使用第一种):u1、u2

u1作为定义者定义一个视图,u1对基表有select权限,u2对视图有访问权限:u2是以定义者的身份访问可以查询到基表的内容;

u1作为定义者定义一个视图,u1对基表没有select权限,u2对视图有访问权限,u2对基表有select权限:u2访问视图的时候是以调用者的身份,此时调用者是u2,可以查询到基表的内容.

六、视图查询语句的处理

示例:所有有罚款的球员的信息

创建视图:

mysql> create view cost_raisers

-> as

-> select * from PLAYERS

-> where playerno in (select playerno from PENALTIES);

查询视图:

mysql> select playerno from cost_raisers

-> where town='Stratford';

1、替代方法:

先把select语句中的视图名使用定义视图的select语句来替代;

再处理所得到的select语句.

2、具体化方法:

先处理定义视图的select语句,这会生成一个中间的结果集;

然后,再在中间结果上执行select查询.

mysql> select from ;

以上就是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值