视图数据MySQL学习笔记14:视图 视图数据

新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正

    

什么是视图

    视图是从一个或多个表中导出来的表,是一种虚拟存在的表。

    视图就像一个窗口,通过这个窗口可以看到系统专门供给的数据。

    这样,用户可以用不看到整个数据库中的数据,而之心关对自己有效的数据。

    数据库中只寄存了视图的定义,而没有寄存视图中的数据,这些数据寄存在来原的表中。

    应用视图询查数据时,数据库系统会从来原的表中掏出对应的数据。

    视图中的数据依赖于来原表中的数据,一旦表中数据生发转变,显示在视图中的数据也会生发转变。

 

    

视图的用作

    1.使操纵简单化,可以对经常应用的询查定义一个视图,应用户不必为一样的询查操纵指定条件

    2.加增数据的安全性,通过视图,用户只能询查和改修指定的数据。

    3.高提表的逻辑独立性,视图可以屏蔽原有表构结变更带来的影响。

 

    总而言之,应用视图的大部份况情是为了障保数据安全性,高提询查效率

 

    参考表:

    视图数据MySQL学习笔记14:视图 视图数据_第1张图片

    视图数据MySQL学习笔记14:视图 视图数据_第2张图片

    

建创视图的语法

CREATE [ALGORITHM]={UNDEFINED|MERGE|TEMPTABLE}]
       VIEW 视图名 [(性属单清)]
       AS SELECT 语句
       [WITH [CASCADED|LOCAL] CHECK OPTION];
ALGORITHM表现视图选择的算法(可选数参)

    

  • UNDEFINED:MySQL将自动选择所要应用的算法
  • MERGE:将视图的语句与视图定义合并起来,使得视图定义的某一部份代取语句的对应部份
  • TEMPTABLE:将视图的结果存入临时表,然后应用临时表执行语句

    视图名表现要建创的视图的名称

    性属单清表现视图中的列名,认默与SELECT询查结果中的列名雷同(可选数参)

    WITH CHECK OPTION表现更新视图时要证保在该试图的限权范围内之(可选数参)

    

  • CASCADED:更新视图时要满意全部关相视图和表的条件
  • LOCAL:更新视图时,要满意该视图本身定义的条件可即

 

    tips:建创试图时最好加上WITH CASCADED CHECK OPTION数参,这类方法比拟格严

        可以证保数据的安全性

 

    

视图操纵

    

在单表上建创视图

mysql> CREATE VIEW work_view(ID,NAME,ADDR) AS SELECT id,name,address FROM work;  
Query OK, 0 rows affected (0.05 sec)
此处work_view为视图名,面后括号内的数参代表视图中的列

    AS表现将面后SELECT 语句中的询查结果赋给面前的视图中

    

 

    

在多表上建创视图

mysql> CREATE ALGORITHM=MERGE VIEW work_view2(ID,NAME,SALARY)
    -> AS SELECT work.id,name,salary FROM work,salary
    -> WHERE work.id=salary.id
    -> WITH LOCAL CHECK OPTION;
Query OK, 0 rows affected (0.02 sec)
在多表中建创视图要需两表有指定联系,如上面的work.id=salary.id

 

    

SELECT询查视图

mysql> SELECT * FROM work_view;
+----+--------+--------+
| ID | NAME   | ADDR   |
+----+--------+--------+
|  1 | 张三   | 北京   |
|  2 | 李四   | 上海   |
|  3 | 王五   | 湖南   |
|  4 | 赵六   | 重庆   |
+----+--------+--------+
4 rows in set (0.00 sec)
此处的SELECT语句用法和其他表中的用法一样

    别忘了,视图也是一张表,只不过它是虚拟的

 

    

DESCRIBE查看视图基本信息

mysql> DESCRIBE work_view;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int(10)     | NO   |     | NULL    |       |
| NAME  | varchar(20) | NO   |     | NULL    |       |
| ADDR  | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
与以往一样,此处的DESCRIBE可以简写为DESC

 

    

SHOW TABLE STATUS查看视图基本信息

    每日一道理
书籍好比一架梯子,它能引领人们登上文化的殿堂;书籍如同一把钥匙,它将帮助我们开启心灵的智慧之窗;书籍犹如一条小船,它会载着我们驶向知识的海洋。
mysql> SHOW TABLE STATUS LIKE 'work_view'\G
*************************** 1. row ***************************
           Name: work_view
         Engine: NULL
        Version: NULL
     Row_format: NULL
           Rows: NULL
 Avg_row_length: NULL
    Data_length: NULL
Max_data_length: NULL
   Index_length: NULL
      Data_free: NULL
 Auto_increment: NULL
    Create_time: NULL
    Update_time: NULL
     Check_time: NULL
      Collation: NULL
       Checksum: NULL
 Create_options: NULL
        Comment: VIEW
1 row in set (0.00 sec)
此处大部份信息显示为NULL,更加说明白视图只是一张虚拟表

    如果应用SHOW TABLE STATUS查看一张实真表,结果就不会如此

    

 

    

SHOW CREATE VIEW查看视图详细信息

mysql> SHOW CREATE VIEW work_view\G
*************************** 1. row ***************************
                View: work_view
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `work_view` AS select `work`.`id` AS `ID`,`work`.`name` AS `NAME`,`work`.`address` AS `ADDR` from `work`
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set (0.00 sec)
尼玛好杂复,这里包含了视图的各个性属

    

 

    

在views表中查看视图详细信息

mysql> SELECT * FROM information_schema.views\G
*************************** 1. row ***************************
       TABLE_CATALOG: def
        TABLE_SCHEMA: person
          TABLE_NAME: work_view
     VIEW_DEFINITION: select `person`.`work`.`id` AS `ID`,`person`.`work`.`name` AS `NAME`,`person`.`work`.`address` AS `ADDR` from `person`.`work`
        CHECK_OPTION: NONE
        IS_UPDATABLE: YES
             DEFINER: root@localhost
       SECURITY_TYPE: DEFINER
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
*************************** 2. row ***************************
       TABLE_CATALOG: def
        TABLE_SCHEMA: person
          TABLE_NAME: work_view2
information_schema.views表内包含了全部的视图定义信息

    不过,常通应用SHOW CREATE VIEW 更加便方

    这里信息太长,没有完整举列……

 

    

改修视图

    改修视图是指改修数据库中已存在的表的定义,当基本表的某些段字生发转变时,可以通过改修视图来坚持视图和基本表之间分歧

    

CREATE OR REPLACE VIEW语句改修视图

mysql> CREATE OR REPLACE ALGORITHM=TEMPTABLE
    -> VIEW work_view(ID,NAME) 
    -> AS SELECT id,name FROM work;
Query OK, 0 rows affected (0.03 sec)
话说,CREATE OR REPLACE语句非常灵巧

    在视图存在的况情下可对视图停止改修,视图不在的况情下可建创视图

    其基本用法和CREATE VIEW 几乎分歧

 

    

ALTER语句改修视图

mysql> ALTER VIEW work_view2(NAME,SALARY,ADDR)
    -> AS SELECT name,salary,address FROM work,salary
    -> WHERE work.id=salary.id;
Query OK, 0 rows affected (0.03 sec)
我这把名字、资工和地址当作段字改修了视图

    如果是实真的话,对小偷说来极为便方

    

 

    

更新视图

    更新视图是指通过视图来插入、更新和删除表中的数据,认为视图是一个虚拟表,其中木有数据

    通过视图更新时,都是转换到基本表来更新

mysql> UPDATE work_view2 SET SALARY=5899.00 WHERE NAME='张三';
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0
此处语句等价于
mysql> UPDATE salary SET salary=5899.00 WHERE id=1;
tips:视图中虽然可以更新数据,但是有很多制限

    一般况情下,最好将视图作为询查数据的虚拟表,而不要通过视图更新数据

 

    

删除视图

    删除视图是指删除数据库中已存在的视图,删除视图时,只能删除视图的定义,不会删除数据

mysql> DROP VIEW IF EXISTS work_view;
Query OK, 0 rows affected (0.00 sec)

mysql> DROP VIEW work_view2;
Query OK, 0 rows affected (0.01 sec)
这里的IF EXIST数参用来断判视图否是存在,也可以不写

 

 

文章结束给大家分享下程序员的一些笑话语录: 警告
有一个小伙子在一个办公大楼的门口抽着烟,一个妇女路过他身边,并对他 说, “你知道不知道这个东西会危害你的健康?我是说, 你有没有注意到香烟 盒上的那个警告(Warning)?”
小伙子说,“没事儿,我是一个程序员”。
那妇女说,“这又怎样?”
程序员说,“我们从来不关心 Warning,只关心 Error”


你可能感兴趣的:(视图数据)