Mysql教程

8.3查看视图

查看视图是指查看数据库中已存在的视图的定义。查看视图必须要有SHOW VIEW的权限,MySQL数据库下的user表中保存着这个信息。查看视图的方法包括DESCRIBE语句、SHOW TABLE STATUS语句、SHOW CREATE VIEW 语句和查询 information_schema 数据库下的views表等。本节将详细讲解查看视图的方法。

8.3.1DESCRIBE语句查看视图基本信息

在6.2.1小节中已经详细讲解过使用DESCRIBE语句来查看表的基本定义。因为,视图也是一张表。只是这张表比较特殊,是一张虚拟的表。因此,同样可以使用DESCRIBE语句可以用来查看视图的基本定义。DESCRIBE语句查看视图的基本形式与查看表的形式=是一样的。基本形式如下:

DESCRIBE 视图名;

其中,“视图名”参数指所要查看的视图的名称。

【示例8-5】下面是用DEXCRIBE语句查看视图worker_view1的定义,代码如下:

DESCRIBE worker_view1;
mysql> desc worker_view1;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| name       | varchar(20)  | NO   |     | NULL    |       |
| department | varchar(20)  | NO   |     | NULL    |       |
| sex        | varchar(4)   | NO   |     | NULL    |       |
| age        | double(23,6) | YES  |     | NULL    |       |
| address    | varchar(50)  | YES  |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

结果中显示了字段的名称(Field)、数据类型(Type)、是否为空(Null)、是否为主外键(Key)、默认值(Default)和额外信息(Extra)。DESCRIBE可以缩写成DESC可以直接使用worker_view1查看表的结构,代码如下:

DESC worker_view1 ;

使用DESC语句运行后的结果,与DESCRIBE语句运行后的结果一致。

说明:如果只需要了解视图中的各个字段的简单信息,可以使用DESCRIBE语句。DESCRIBE语句查看视图的方式与查看普通表的方式是一样的,结果显示的方式 也是一样的。通常情况下,都是使用DESC代替DESCRIBE。

8.3.2SHOW TABLE STATUS语句查看视图基本信息

在MySQL中,可以使用SHOW TABLE STATUS语句来查看视图的信息。其语法形式如下:

SHOW TABLE STATUS LIKE ‘视图名’;

其中,“0处”表示后面匹配的是字符串;“视图名”参数指要查看的视图的名称, 需要用单引号引起了。

【示例8-6】下面是用SHOW TABLE STATUS语句查看视图worker_view1的信息,代码如下:

SHOW TABLE STATUS LIKE 'worker_view1';

代码执行结果如下:

mysql> show table status like 'worker_view1';
+--------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-
----------+----------------+-------------+-------------+------------+-----------+----------+----------------+---------+
| Name         | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length |
Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+--------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-
----------+----------------+-------------+-------------+------------+-----------+----------+----------------+---------+
| worker_view1 | NULL   |    NULL | NULL       | NULL |           NULL |        NULL |            NULL |         NULL |
     NULL |           NULL | NULL        | NULL        | NULL       | NULL      |     NULL | NULL           | VIEW    |
+--------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-
----------+----------------+-------------+-------------+------------+-----------+----------+----------------+---------+
1 row in set (0.03 sec)

执行结果显示,表的说明(Comment)项的值为VIEW,说明该表为视图。存储引擎、 数据长度等信息都显示为NULL,说明视图是虚拟表,与普通表是有差异的。同样使用 SHOW TABLE STATUS语句来查看department表的信息。查询结果如下:

mysql> show table status like 'department' \G
*************************** 1. row ***************************
           Name: department
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 16384
      Data_free: 8388608
 Auto_increment: NULL
    Create_time: 2015-09-25 17:22:14
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.02 sec)

从结果可以看出,department表的基本信息都显示出来,包括存储引擎、创建时间等。但是Comment项没有信息。这就是视图和普通表最直接的区别。

说明:SHOW TABLE STATUS语句虽然也可以查看视图的基本信息,但是通常很少使 用。因为,使用SHOW TABLE STATUS语句查询视图信息时,各个属性显示的 值都是NULL。只有Comment属性显示值为VIEW。

8.3.3SHOW CREATE VIEW语句查看视图详细信息

在MySQL中,SHOW CREATE VIEW语句可以查看视图的详细定义。其语法形式 如下:

SHOW CREATE VIEW 视图名

【示例8-7】下面是用SHOW CREATE VIEW语句查看视图worker_viewl的信息,代码如下:

SHOW CREATE VIEW worker_view1 ;

代码执行结果如下:

mysql> show create view worker_view1;
+--------------+--------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------+----------------------+----------------------+
| View         | Create View
                        | character_set_client | collation_connection |
+--------------+--------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------+----------------------+----------------------+
| worker_view1 | CREATE ALGORITHM=MERGE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `worker_view1` AS select `w
orker`.`name` AS `name`,`department`.`d_name` AS `department`,`worker`.`sex` AS `sex`,(2009 - `worker`.`birthday`) AS `a
ge`,`department`.`address` AS `address` from (`worker` join `department`) where (`worker`.`d_id` = `department`.`d_id`)
WITH LOCAL CHECK OPTION | utf8                 | utf8_general_ci      |
+--------------+--------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------+----------------------+----------------------+
1 row in set (0.00 sec)

执行结果显示了详细的信息。包括视图的各个属性、WITHLOCALCHECKOPTION 条件和字符编码(character set_client)等信息。通过SHOWCREATEVIEW语句,可以查看视图的所有信息。

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

在MySQL中,所有视图的定义都存在information_schema数据库下的views表中。查询viewS表,可以査看到数据库中所有视图的详细信息。查询的语句如下:

SELECT * FROM information_schema.views;

其中,“* ”表示查询所有的列的信息;information_schema.views 表示 information_schema 数据库下面的views表。

【示例8-8】下面是用SELECT语句查询views表中的信息。代码执行如下:

mysql> SELECT * FROM information_schema.views \G;
mysql> select * from information_schema.views \G
*************************** 1. row ***************************
       TABLE_CATALOG: NULL
        TABLE_SCHEMA: example
          TABLE_NAME: department_view1
     VIEW_DEFINITION: select `example`.`department`.`d_id` AS `d_id`,`example`.`department`.`d_name` AS `d_name`,`exampl
e`.`department`.`function` AS `function`,`example`.`department`.`address` AS `address` from `example`.`department`
        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: NULL
        TABLE_SCHEMA: example
          TABLE_NAME: department_view2
     VIEW_DEFINITION: select `example`.`department`.`d_name` AS `name`,`example`.`department`.`function` AS `function`,`
example`.`department`.`address` AS `loction` from `example`.`department`
        CHECK_OPTION: NONE
        IS_UPDATABLE: YES
             DEFINER: root@localhost
       SECURITY_TYPE: DEFINER
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
*************************** 3. row ***************************
       TABLE_CATALOG: NULL
        TABLE_SCHEMA: example
          TABLE_NAME: worker_view1
     VIEW_DEFINITION: select `example`.`worker`.`name` AS `name`,`example`.`department`.`d_name` AS `department`,`exampl
e`.`worker`.`sex` AS `sex`,(2009 - `example`.`worker`.`birthday`) AS `age`,`example`.`department`.`address` AS `address`
 from `example`.`worker` join `example`.`department` where (`example`.`worker`.`d_id` = `example`.`department`.`d_id`)
        CHECK_OPTION: LOCAL
        IS_UPDATABLE: YES
             DEFINER: root@localhost
       SECURITY_TYPE: DEFINER
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci

读者现在看到查询结果只是显示结果的一部分。因为数据库中的视图不止这两个,还有很多视图的信息没有贴出来。查询结果显示,数据库中已经存在department_viewl和department_view2这两个视图。结果中显不了这两个视图的详细伯息。

技巧:SHOW CREATE V语句可以查看视图的详细信息,如果读者希望了解详细信 息可以使用这个语句。所有视图的定义都是存储在infomation_schema数据库下的views表中,也可以在这个表中查看视图的定义。不过,通常情况下都是使用 SHOW CREATE VIEW 语句。


关注微信获取最新动态