上学笔记,开拓基础连串1陆

一. 怎样是视图
视图是壹种虚拟存在的表,行和列数据来源于,定义视图的查询中利用的表,并且是在利用视图时动态变化的。优势有:
  简单:
使用视图的用户完全没有须求关注前边对应的表的结构,关联条件,筛选标准。
  安全:使用视图的用户只可以访问他们被允许查询的结果集。
  数据独立: 源表增添列对视图未有影响,源表修改列名,则经过退换视图
对应好源表的列名来减轻,不会促成对访问者的影响。

  style=”font-size: 1八px; font-family: "Microsoft YaHei"”> style=”font-size: 1四pt; color: #00柒仟”>阅读目录— style=”color: #ff6600″>长远解析MySQL视图

style=”font-size: 18px; font-family: "Microsoft YaHei"”>1、创造视图

style=”font-size: 18px; font-family: "Microsoft YaHei"”>2、 style=”font-size: 18px; font-family: "Microsoft YaHei"; color: #33cccc”> style=”color: #33cccc”>查阅视图

style=”font-size: 18px; font-family: "Microsoft YaHei"”>3、 style=”font-size: 18px; font-family: "Microsoft YaHei"; color: #33cccc”> style=”color: #33cccc”>视图的转移

style=”color: #000000; font-family: "Microsoft YaHei"; font-size: 18px; line-height: 1.5; background-color: initial”>  1、create
or replace view

上学笔记,开拓基础连串1陆。 style=”color: #000000; font-family: "Microsoft YaHei"; font-size: 18px; line-height: 1.5; background-color: initial”>  2、 style=”font-size: 18px; font-family: "Microsoft YaHei"; color: #000000″>alter

style=”font-size: 18px; font-family: "Microsoft YaHei"; color: #000000″>  3、 style=”font-size: 18px; font-family: "Microsoft YaHei"; color: #000000″>DML

style=”font-size: 18px; font-family: "Microsoft YaHei"; color: #000000″>  4、 style=”font-size: 18px; font-family: "Microsoft YaHei"; color: #000000″>drop

style=”font-size: 18px; font-family: "Microsoft YaHei"”>4、 style=”font-size: 18px; font-family: "Microsoft YaHei"; color: #33cccc”> style=”color: #33cccc”>使用with check
option约束

style=”font-size: 18px; font-family: "Microsoft YaHei"; color: #33cccc”> style=”color: #33cccc”>   style=”font-size: 18px; font-family: "Microsoft YaHei"; color: #33cccc”> style=”color: #33cccc”>嵌套视图

style=”font-size: 18px; font-family: "Microsoft YaHei"; color: #33cccc”> style=”color: #33cccc”> style=”color: #000000″>5、概念视图时的任何选项: style=”color: #000000″>algorithm、definer、SQL
security视图权限

style=”font-size: 18px; font-family: "Microsoft YaHei"”>6、 style=”font-size: 18px; font-family: "Microsoft YaHei"; color: #33cccc”> style=”color: #33cccc”>视图查询语句的拍卖

style=”font-size: 1八px; font-family: "Microsoft YaHei"; color: #33cccc”> style=”color: #3三cccc”>   style=”color: #000000″>壹、 style=”font-size: 1八px; font-family: "Microsoft YaHei"; color: #33cccc”> style=”color: #000000″>代替格局

style=”font-size: 1八px; font-family: "Microsoft YaHei"; color: #3三cccc”> style=”color: #000000″>  二、 style=”font-size: 1八px; font-family: "Microsoft YaHei"; color: #000000″>具体化方法

怎么着是视图

视图(View)是一种虚拟存在的表,对于使用视图的用户来讲基本上是晶莹剔透的。视图并
不在数据库中实际上存在,行和列数据来源定义视图的询问中央银行使的表,并且是在动用视图时
动态变化的

视图相对于日常的表的优势首要包蕴以下几项:

  • 简易:使用视图的用户完全无需关心前面对应的表的结构、关联条件和筛选标准,对用户来说早已是过滤好的复合条件的结果集
  • 安然:使用视图的用户只好访问他们被允许查询的结果集,对表的权位管理并无法限制到有个别行有些列,可是经过视图就能够归纳的兑现
  • 数量独立:壹旦视图的构造鲜明了,可以屏蔽表结构转换对用户的熏陶,源表增加列对视图未有影响;源表修改列名,则足以由此改变视图来化解,不会导致对访问者的熏陶

Mysql 学习笔记(肆)

1.一 创造视图的操作

Q:什么是视图?视图是为什么用的?

始建也许修改视图

开创视图须求有 CREATE VIEW 的权柄,并且对于查询涉及的列有 SELECT
权限。假设运用 CREATE OR REPLACE 或者 ALTER
修改视图,那么还必要该视图的 DROP 权限

创办视图的语法为:

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement[WITH [CASCADED | LOCAL] CHECK OPTION]

修改视图的语法为:

ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]

视图的可更新性和视图中询问的概念有涉及,以下连串的视图是不足更新的

  • 饱含以下入眼字的 SQL 语句:聚合函数(SUM、MIN、MAX、COUNT
    等)、DISTINCT、GROUP BY、HAVING、UNION 恐怕 UNION ALL
  • 常量视图
  • SELECT 中包涵子查询
  • JOIN
  • FROM 3个不可能立异的视图
  • WHERE 字句的子查询引用了 FROM 字句中的表

WITH [CASCADED | LOCAL] CHECK OPTION
决定了是不是允许更新数据使记录不再知足视图的口径。那个选项与 Oracle
数据库中的选项是看似的,在那之中:

  • LOCAL 是只要满足本视图的准绳就能够立异;
  • CASCADED 则是必须知足全数针对该视图的具有视图的原则才能够立异

只要未有领会是 LOCAL 依旧 CASCADED,则默许是 CASCADED

视图(View)


从用户角度来看,二个视图是从3个一定的角度来查看数据库中的数据。从数量
库系统里头来看,1个视图是由SELECT
语句组成的询问
定义的虚拟表,视图是由一
张或多张表中的数据整合的,从数据库系统外部来看,视图就不啻一张表相同,对表能够进行的形似操作都能够动用于视图,举例查询,插入,修改,删除操作等。
视图是3个虚拟表,其剧情由查询定义。

➢ 视图概述:

✓ 视图以通过定制的主意展示来自3个或多个表的多少

✓ 视图是1种数据库对象,用户能够象查询普通表同样查询视图。

✓ 视图内实际未有存款和储蓄任何数据,它只是对表的2个询问。

✓ 视图的概念保存在多少字典内。成立视图所依照的表为“基表”。

✓ 视图一经定义未来,就足以像表一样被询问、修改、删除和更新

➢ 视图功用

✓ 简化数据查询语句

✓ 使用户能从周详看到同样数据

✓ 提升了数码的安全性

✓ 提供了一定水准的逻辑独立性

✓ 收缩带宽流量、优化后还可加强实行功用

➢ 视图优点

✓ 提供了其余1种级其他表安全性

✓ 隐藏的多寡的复杂性

✓ 简化的用户的 SQL 命令

✓ 通过重命名列,从另3个角度提供数据

 -- 创建视图
CREATE  OR REPLACE VIEW view_city
  AS 
  SELECT * FROM city;
 -- 查询视图
 SELECT * FROM view_city;

A:

删去视图

用户能够一回删除二个要么三个视图,前提是必须有该视图的 DROP 权限

DROP VIEW [IF EXISTS] view_name [, view_name] ...[RESTRICT | CASCADE]

(1)视图的创设

1.创办命令

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)] AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]

注:

➢ OSportage REPLACE:给定了 OHummerH二 REPLACE 子句,语句能够替换已某些同名视图。

➢ ALGO安德拉ITHM:可选的 mysql 算法扩张,算法会影响 MySQL 管理视图的方式。有以下四个值: UNDEFINED–MySQL
将选取所要使用的算法。借使或者,它协理于 MEGL450GE 而不是
TEMPTABLE,那是因为 MEWranglerGE
日常更管用,而且假若接纳了权且表,视图是不可更新的。
ME福睿斯GE–会将引用视图的口舌的公文与视图定义合并起来,使得视图定义
的某一片段代表语句的呼应部分。TEMPTABLE–视图的结果将被停放权且表中,然后采取它实践语句。

1、METucsonGE,将视图的sql语句和引用视图的sql语句合并在一道,末了壹块推行。

2、TEMPTABLE,将视图的结果集存放在暂且表中,每一回执行时从临时表中操作。

叁、UNDEFINED,私下认可的视图类型,DBMS倾向于选取而不是迟早采纳ME宝马X5GE,因为ME昂CoraGE的频率越来越高,更重要的是目前表视图不可能立异。从而,这里推荐使用MELacrosseGE算法类型视图。

view_name :视图名

column_list: 要想为视图的列定义鲜明的名目,列出由逗号隔绝的列
名。column_list 中的名称数目必须等于 SELECT
语句检索的列数。若选取与源表或视图中1律的列名时能够简轻易单
column_list。

select_statement : 用来创制视图的 SELECT 语句,可在 SELECT 语
句中查询多个表或视图。但对 SELECT 语句有以下的限量: 一.
定义视图的用户必须对所参照的表或视图有询问(就能够举行 SELECT
语句)权限; 二. 在概念中引用的表或视图必须存在;

WITH [cascaded|local] CHECK OPTION:在有关可更新视图的 WITH
CHECK OPTION 子句中,当视图是依照另一个视图定义的时,LOCAL 和 CASCADED
关键字决定了检查测试的界定。LOCAL 关键字对 CHECK OPTION
进行了限定,使其仅效能在概念的视图上,CASCADED
会对将实行业评比估的基表实行检讨。假使未给定任壹重大字,暗中同意值为
CASCADED。WITH CHECK OPTION 建议在可更新视图上所实行的修改都要顺应
select_statement 所钦定的
限制条件,那样能够保障数量修改后,仍可通过视图看到修改的数据。

例子:create view student_index as select sno,sname,from student; 

997755.com澳门葡京 1

视图–1

997755.com澳门葡京 2

  视图(view)是1种虚拟存在的表,是贰个逻辑表,本身并不含有数据。作为一个select语句保存在数量字典中的。

查看视图

  • show tables;
  • show table status like '***';
  • show create view ***;
  • information_schema.views

(2)修改视图

ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name
[(column_list)] AS select_statement [WITH [CASCADED | LOCAL]
CHECK OPTION]

注: 该语句用于转移已有视图的概念。其语法与 CREATE VIEW
类似。该语句须要持有 针对视图的 CREATE VIEW 和 DROP 权限,也急需针对
SELECT 语句中引用的每1列的 有个别权限。

例子:alter view student_index as select sno as ‘学号’,sname as
‘姓名’,sage as ‘年龄’ from student; 

997755.com澳门葡京 3

视图–2

一.2 修改视图

  通过视图,能够显示基表的片段数据;视图数据来源于定义视图的询问中央银行使的表,使用视图动态变化。

(叁)查看视图

SHOW CREATE VIEW view_name;

例子:show create view student_index; 

997755.com澳门葡京 4

视图–1

997755.com澳门葡京 5

视图–3

-- 修改视图
ALTER VIEW view_city
 AS 
 SELECT  cityname FROM city;

基表:用来创制视图的表叫做基表base
table

(肆)删除视图

DROP VIEW [IF EXISTS] view_name [, view_name] … [RESTRICT |
CASCADE]

说明:

壹、DROP VIEW 能够删除 1 个或四个视图。必须在每种视图上具有 DROP 权限。

2、能够选用重要字 IF EXISTS 来防范因不存在的视图而失误。

三、纵然给定了 REST汉兰达ICT 和 CASCADE,将分析并忽略它们。

例子:drop view student_index; 

997755.com澳门葡京 6

视图–4

997755.com澳门葡京 7

Q:为何要动用视图?

(五)更新视图

概述:

➢ 视图的行使与表同样,有增加和删除改查多种操作,且语法也与表同样。

➢ 在视图上也得以选取修改数据的 DML 语句,如 INSERT、UPDATE 和 DELETE
能够统称为“通过视图更新数据”。

997755.com澳门葡京 ,➢ 通过视图更新数据有如下限制:

✓ 二次只好修改二个平底的基表

✓ 假设改造违反了基表的自律原则,则无从立异视图

✓ 若是视图中的列不是表中的原始列(如创建视图时行使了再三再四操作符、
聚合函数等),则不可能透过视图更新。

视图更新操作:

➢ 可更新的视图:要透过视图更新基本表数据,必须保障视图是可更新视图,
即能够在 INSET、UPDATE 或 DELETE 等语句个中使用它们。对于可更新
的视图,在视图中的行和基表中的行之间必须持有一定的关系。还有一
些特定的别的组织,这类结构会使得视图不可更新。

若果视图包蕴下述结 构中的别样一种,那么它便是不行更新的:

✓ 聚合函数;

✓ DISTINCT 关键字;

✓ GROUP BY 子句;

✓ ORDER BY 子句;

✓ HAVING 子句;

✓ UNION 运算符;

✓ 位于采用列表中的子查询;

✓ FROM 子句中蕴藏三个表;

✓ SELECT 语句中援引了不足更新视图;

➢ 插入数据

应用 INSERT 语句通过视图向基本表插入数据

注意:

✓ 当视图所依据的基本表有多少个时,无法向该视图插入数据,因为那将
会影响多个基本表。 ✓ 对 INSERT 语句还有2个限制:SELECT 语句中必须包蕴FROM 子句 中内定表的保有不能够为空的列。

➢ 修改数据:使用 UPDATE 语句能够透过视图修改基本表的数据
注意:若3个视图正视于多少个基本表,则二回修改该视图只好改成叁个基本表的数额。

➢ 删除数据:使用 DELETE 语句可以经过视图删除基本表的数据
注意:对借助于多少个基本表的视图,不可能应用 DELETE 语句。

997755.com澳门葡京 8

视图–5

1.3 限制 

A:因为视图的不在少数亮点,如下

视图一般只是用来做询问利用,如若要对视图做修改有如下限制不可能革新:
包涵关键字 聚合函数(sum,min,max,count等),distinct,group by ,
having,union ,union all。
常量视图。
select 中包含子查询。
jion。
from 2个不能够创新的视图。
where 字句的子查询引用了from字句的表。

  ①)轻便:使用视图的用户完全无需关爱前边对应的表的协会、关联条件和筛选规范,对用户来讲早已是过滤好的复合条件的结果集。

   LOCAL 是假设满意本视图的典型就足以创新, CASCADED
则是必须满意全体针对该视图的装有视图的基准才方可立异,
如若未有分明性是LOCAL
如故CASCADED,则暗许是CASCADED,由于视图基本不做修改,这里就不在演示。

  二)安全:使用视图的用户只可以访问他们被允许查询的结果集,对表的权柄管理并不可能限制到有个别行有个别列,可是透过视图就能够大概的兑现。

 -- local与CASCADED 语法
  CREATE  OR REPLACE VIEW view_city
  AS 
  SELECT * FROM city;
  -- with(local | CASCADED)   CHECK OPTION;

  三)数据独立:1旦视图的构造分明了,能够屏蔽表结构变迁对用户的震慑,源表扩充列对视图未有影响;源表修改列名,则可以通过修改视图来化解,不会招致对访问者的震慑。

一.4  删除视图

一句话来讲,使用视图的绝大大多处境是为了保险数据安全性,提升查询功效。

drop view view_city;

 

1.伍 查看视图

一、创设视图

--  查看视图的定义   
SHOW CREATE VIEW view_city
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    VIEW view_name [(column_list)]
    AS select_statement
   [WITH [CASCADED | LOCAL] CHECK OPTION]

997755.com澳门葡京 9

一)O昂科威 REPLACE:表示替换已有视图

-- 查看视图的定义
SELECT * FROM information_schema.views WHERE table_name = 'view_city'

2)ALGO瑞鹰ITHM:表示视图选拔算法,暗许算法是UNDEFINED(未定义的):MySQL自动采纳要选拔的算法
;merge合并;temptable权且表

997755.com澳门葡京 10

3)select_statement:表示select语句

 

4)[WITH [CASCADED | LOCAL] CHECK
OPTION]:表示视图在更新时保险在视图的权位限制之内

  cascade是暗中同意值,表示更新视图的时候,要满足视图和表的有关条件

  local代表更新视图的时候,要满意该视图定义的二个口径就能够

TIPS:推荐使用WHIT [CASCADED|LOCAL] CHECK
OPTION选项,能够保险数据的安全性 

骨干格式:

  create
view <视图名称>[(column_list)]

     
 as select语句

     
 with check option;

一、在单表上创制视图

mysql> create view v_F_players(编号,名字,性别,电话)
    -> as
    -> select PLAYERNO,NAME,SEX,PHONENO from PLAYERS
    -> where SEX='F'
    -> with check option;
Query OK, 0 rows affected (0.00 sec)

mysql> desc v_F_players;
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| 编号    | int(11)  | NO   |     | NULL    |       |
| 名字    | char(15) | NO   |     | NULL    |       |
| 性别    | char(1)  | NO   |     | NULL    |       |
| 电话    | char(13) | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> select * from  v_F_players;
+--------+-----------+--------+------------+
| 编号    | 名字      | 性别    | 电话        |
+--------+-----------+--------+------------+
|      8 | Newcastle | F      | 070-458458 |
|     27 | Collins   | F      | 079-234857 |
|     28 | Collins   | F      | 010-659599 |
|    104 | Moorman   | F      | 079-987571 |
|    112 | Bailey    | F      | 010-548745 |
+--------+-----------+--------+------------+
5 rows in set (0.02 sec)

2、在多表上创立视图

mysql> create view v_match
    -> as 
    -> select a.PLAYERNO,a.NAME,MATCHNO,WON,LOST,c.TEAMNO,c.DIVISION
    -> from 
    -> PLAYERS a,MATCHES b,TEAMS c
    -> where a.PLAYERNO=b.PLAYERNO and b.TEAMNO=c.TEAMNO;
Query OK, 0 rows affected (0.03 sec)

mysql> select * from v_match;
+----------+-----------+---------+-----+------+--------+----------+
| PLAYERNO | NAME      | MATCHNO | WON | LOST | TEAMNO | DIVISION |
+----------+-----------+---------+-----+------+--------+----------+
|        6 | Parmenter |       1 |   3 |    1 |      1 | first    |
|       44 | Baker     |       4 |   3 |    2 |      1 | first    |
|       83 | Hope      |       5 |   0 |    3 |      1 | first    |
|      112 | Bailey    |      12 |   1 |    3 |      2 | second   |
|        8 | Newcastle |      13 |   0 |    3 |      2 | second   |
+----------+-----------+---------+-----+------+--------+----------+
5 rows in set (0.04 sec)

视图将大家无需的数量过滤掉,将有关的列名用大家自定义的列名替换。视图作为1个做客接口,不管基表的表结议和表名有多复杂。

   如若成立视图时不醒目指定视图的列名,那么列名就和定义视图的select子句中的列名完全一样;

  假若显式的钦命视图的列名就依照钦定的列名。

留神:展现钦定视图列名,须要视图名后边的列的数量必须相配select子句中的列的数目。

【回到顶部】

贰、查看视图

壹、使用show
create view语句查看视图音讯

mysql> show create view v_F_players\G;
*************************** 1. row ***************************
                View: v_F_players
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_F_players` AS select `PLAYERS`.`PLAYERNO` AS `编号`,`PLAYERS`.`NAME` AS `名字`,`PLAYERS`.`SEX` AS `性别`,`PLAYERS`.`PHONENO` AS `电话` from `PLAYERS` where (`PLAYERS`.`SEX` = 'F') WITH CASCADED CHECK OPTION
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set (0.00 sec)

贰、视图壹旦成立落成,就足以像3个普通表那样选取,视图首要用来查询

mysql>
select * from view_name;

3、有关视图的信息记录在information_schema数据库中的views表中

mysql> select * from information_schema.views 
    -> where TABLE_NAME='v_F_players'\G;
*************************** 1. row ***************************
       TABLE_CATALOG: def
        TABLE_SCHEMA: TENNIS
          TABLE_NAME: v_F_players
     VIEW_DEFINITION: select `TENNIS`.`PLAYERS`.`PLAYERNO` AS `编号`,`TENNIS`.`PLAYERS`.`NAME` AS `名字`,`TENNIS`.`PLAYERS`.`SEX` AS `性别`,`TENNIS`.`PLAYERS`.`PHONENO` AS `电话` from `TENNIS`.`PLAYERS` where (`TENNIS`.`PLAYERS`.`SEX` = 'F')
        CHECK_OPTION: CASCADED
        IS_UPDATABLE: YES
             DEFINER: root@localhost
       SECURITY_TYPE: DEFINER
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
1 row in set (0.00 sec)        

【回到顶部】

三、视图的改换

一、CREATE
OMurano REPLACE VIEW语句修改视图

主干格式:

  create or replace view view_name as
select语句;

在视图存在的事态下可对视图举行更改,视图不在的意况下可创设视图

二、ALTELX570语句修改视图

ALTER
    [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]

瞩目:修改视图是指修改数据库中已存在的表的定义,当基表的有些字段产生转移时,能够因此改变视图来保持视图和基本表之间同样

三、DML操作更新视图

  因为视图自己并未有数量,由此对视图进行的dml操作最后都呈今后基表中

mysql> create view v_student as select * from student;

mysql> select * from v_student;
+--------+--------+------+
| 学号    | name   | sex  |
+--------+--------+------+
|      1 | 张三    | M    |
|      2 | 李四    | F    |
|      5 | 王五    | NULL |
+--------+--------+------+

mysql> update v_student set name='钱六' where 学号='1';

mysql> select * from student;
+--------+--------+------+
| 学号    | name   | sex  |
+--------+--------+------+
|      1 | 钱六    | M    |
|      2 | 李四    | F    |
|      5 | 王五    | NULL |
+--------+--------+------+

自然,视图的DML操作,不是具有的视图都足以做DML操作。

有下列内容之1,视图不能做DML操作:

  壹select子句中涵盖distinct

  二select子句中带有组函数

  三select语句中蕴藏group
by子句

  4select语句中隐含order
by子句

  伍select语句中包涵union
、union all等聚焦运算符

  陆where子句中含有相关子查询

  七from子句中隐含多少个表

  八只要视图中有总计列,则无法创新

  9即使基表中有有个别具备非空约束的列未出现在视图定义中,则无法做insert操作

四、drop删除视图

  删除视图是指剔除数据库中已存在的视图,删除视图时,只好删除视图的定义,不会删除数据,也正是说不动基表:

DROP VIEW [IF EXISTS]   
view_name [, view_name] ...

mysql>
drop view v_student;

设若视图不存在,则抛出尤其;使用IF
EXISTS选项使得删除不设有的视图时不抛出12分。

【回到顶部】

四、使用WITH
CHECK OPTION约束 

对此能够进行DML操作的视图,定义时方可带上WITH
CHECK OPTION约束

作用:

  对视图所做的DML操作的结果,不可能违反视图的WHERE条件的界定。

示范:成立视图,包括一九6零年事先出生的享有球员(老兵)

mysql> create view v_veterans
    -> as
    -> select * from PLAYERS
    -> where birth_date < '1960-01-01'
    -> with check option;
Query OK, 0 rows affected (0.01 sec)

mysql> select * from v_veterans;
+----------+---------+----------+------------+-----+--------+----------------+---------+----------+-----------+------------+----------+
| PLAYERNO | NAME    | INITIALS | BIRTH_DATE | SEX | JOINED | STREET         | HOUSENO | POSTCODE | TOWN      | PHONENO    | LEAGUENO |
+----------+---------+----------+------------+-----+--------+----------------+---------+----------+-----------+------------+----------+
|        2 | Everett | R        | 1948-09-01 | M   |   1975 | Stoney Road    | 43      | 3575NH   | Stratford | 070-237893 | 2411     |
|       39 | Bishop  | D        | 1956-10-29 | M   |   1980 | Eaton Square   | 78      | 9629CD   | Stratford | 070-393435 | NULL     |
|       83 | Hope    | PK       | 1956-11-11 | M   |   1982 | Magdalene Road | 16A     | 1812UP   | Stratford | 070-353548 | 1608     |
+----------+---------+----------+------------+-----+--------+----------------+---------+----------+-----------+------------+----------+
3 rows in set (0.02 sec)

那时,使用update对视图进行退换:

mysql> update v_veterans
    -> set BIRTH_DATE='1970-09-01'
    -> where PLAYERNO=39;
ERROR 1369 (HY000): CHECK OPTION failed 'TENNIS.v_veterans'

因为违反了视图中的WHERE
birth_date < ‘一九伍八-0壹-0一’子句,所以抛出卓殊;

动用with check
option约束限制,保障更新视图是在该视图的权位限制以内。

 

嵌套视图:定义在另3个视图的方面包车型客车视图

mysql> create view v_ear_veterans
    -> as
    -> select * from v_veterans
   -> where JOINED < 1980;

行使WITH
CHECK OPTION约束时,(不钦定选项则暗中同意是CASCADED)

能够使用CASCADED或然LOCAL选项钦点检查的档期的顺序:

  1WITH
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]

一、ALGO奥迪Q5ITHM选项:选择在拍卖定义视图的select语句中利用的点子

  壹UNDEFINED:MySQL将活动采纳所要使用的算法

  贰ME奥迪Q3GE:将视图的口舌与视图定义合并起来,使得视图定义的某1有的替代语句的照望部分

  三TEMPTABLE:将视图的结果存入临时表,然后选择目前表施行语句

缺省ALGO奥德赛ITHM选项等同于ALGOSportageITHM
= UNDEFINED

 

二、DEFINECR-V选项:提议哪个人是视图的创制人或定义者

  1definer=
‘用户名’@’登六主机’

  2只要不内定该选取,则开创视图的用户正是定义者,钦赐关键字CUCR-VRENT_USEWrangler(当前用户)和不钦赐该选用效果等同

 

三、SQL
SECUPRADOITY选项:要询问2个视图,首先必须求有所对视图的select权限。

  可是,假使同2个用户对于视图所走访的表未有select权限,那会如何?

SQL
SECU中华VITY选项决定执行的结果:

  1SQL
SECULX570ITY
DEFINE奇骏:定义(创立)视图的用户必须对视图所走访的表具备select权限,相当于说未来别的用户访问表的时候以定义者的地位,此时别的用户并不曾访问权限。

  2SQL
SECU陆风X8ITY
INVOKE福特Explorer:访问视图的用户必须对视图所走访的表具有select权限。

缺省SQL
SECU汉兰达ITY选项等同于SQL SECU库罗德ITY DEFINERAV4 

视图权限计算:

  使用root用户定义三个视图(推荐使用第一种):u一、u二

    一)u一看作定义者定义一个视图,u一对基表有select权限,u二对视图有访问权限:u2是以定义者的身价走访能够查询到基表的剧情;

    二)u一当做定义者定义3个视图,u1对基表未有select权限,u贰对视图有访问权限,u二对基表有select权限:u贰走访视图的时候是以调用者的身份,此时调用者是u贰,能够查询到基表的剧情。

【回到顶部】

陆、视图查询语句的拍卖

以身作则:全部有罚款的球员的新闻

开创视图:

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';
+----------+
| PLAYERNO |
+----------+
|        6 |
+----------+ 

1、代替格局:

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

  再管理所得到的select语句。

mysql> select playerno from
   -> (
    ->   select * from PLAYERS
    ->   where playerno in->     (select playerno from PENALTIES)
    -> )as viewformula
    -> where town='Stratford';
+----------+
| PLAYERNO |
+----------+
|        6 |
+----------+

2、具体化方法:

  先管理定义视图的select语句,那会变卦3当中级的结果集;

  然后,再在中游结果上推行select查询。

mysql>
select <列名> from <中间结果>;      

  【回到顶部】

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website