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 语句。