MySQL-快速入门(9)视图

1、什么是视图

  视图是一个虚表。视图可以进行查询、增加、修改、删除。进行修改、增加、删除,将影响基本表中的数据。

2、视图相对基本表的优势

  1》简单化:看到的就是想要的字段列,可以简化后续查询。

  2》安全性:通过视图用户只能查询和修改他们所能看到的数据。

  3》逻辑数据独立性:屏蔽基本表结构变化带来的影响。

3、创建视图

//1、algorithm表示视图选择的算法,undefined表示MySQL自动选择算法;merge表示将使用的视
//图语句与视图定义合并起来,使得视图定义的某一部分取代语句对应的部分;temptable表示将
//视图的结果存入临时表,然后用临时表来执行语句。
//2、[with [cascaded | local] check option]表示视图在更新时保证在视图的权限范围之内
//cascaded与local为可选参数,cascaded为默认值,表示更新视图时要满足所有相关视图和表
//的条件;local表示更新视图时满足该视图本身定义的条件即可。
//3、创建的视图默认属于当前数据库,如果要创建属于其他数据库的视图,则db_name.view_name
create
[or replace] [algorithm = {undefined | merge | temptable}] view view_name [(column_list)] as select_statement [with [cascaded | local] check option]

 1》在单表上创建视图,可以给视图指定不同的字段名,创建的时候会与基本表对齐。

mysql> create view v_test as select * from test;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from v_test;
+----+-------+--------+--------+----------+------+
| id | name  | deptId | salary | t_time   | str  |
+----+-------+--------+--------+----------+------+
|  1 | Lucy  |   NULL |   1000 | 10:28:33 | NULL |
|  2 | Lura  |   NULL |   1200 | 10:28:33 | NULL |
|  3 | Kevin |   NULL |   1500 | 10:28:33 | NULL |
|  4 | Nancy |   NULL |   1000 | 22:08:38 | NULL |
|  5 | Bob   |   NULL |   1200 | 22:08:38 | NULL |
+----+-------+--------+--------+----------+------+
5 rows in set (0.01 sec)

mysql> desc v_test;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(10)     | NO   |     | 0       |       |
| name   | varchar(25) | NO   |     | NULL    |       |
| deptId | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
| t_time | time        | YES  |     | NULL    |       |
| str    | varchar(4)  | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

mysql> desc test;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| id     | int(10)     | NO   | PRI | NULL    | auto_increment |
| name   | varchar(25) | NO   |     | NULL    |                |
| deptId | int(11)     | YES  |     | NULL    |                |
| salary | float       | YES  |     | NULL    |                |
| t_time | time        | YES  |     | NULL    |                |
| str    | varchar(4)  | YES  |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

mysql>

  2》在多表上创建视图,基本同单表的操作。

  3》查看视图:权限show view;方法有describe、show table status、show create view、views表中查询视图信息。

     1>describe / desc

describe / desc view_name;

     2>show table status

show table status like 'view_name';

     3>show create view

show create view view_name;

     4>views表中查询视图信息

select * from information_schema.views;
mysql> select * from information_schema.views where table_name='v_test' G
*************************** 1. row ***************************
       TABLE_CATALOG: def
        TABLE_SCHEMA: mybatis
          TABLE_NAME: v_test
     VIEW_DEFINITION: select `mybatis`.`test`.`id` AS `id`,`mybatis`.`test`.`nam
e` AS `name`,`mybatis`.`test`.`deptId` AS `deptId`,`mybatis`.`test`.`salary` AS
`salary`,`mybatis`.`test`.`t_time` AS `t_time`,`mybatis`.`test`.`str` AS `str` f
rom `mybatis`.`test`
        CHECK_OPTION: NONE
        IS_UPDATABLE: YES
             DEFINER: root@localhost
       SECURITY_TYPE: DEFINER
CHARACTER_SET_CLIENT: gbk
COLLATION_CONNECTION: gbk_chinese_ci
1 row in set (0.00 sec)

mysql>

4、修改视图,两种方式

   1》create or replace view

//与创建视图的语句格式一致
create
[or replace] [algorithm ={undefined | merge | temptable}] view view_name [(column_list)] as select_statement [with [cascaded | local] check option]

    2》使用alter语句修改

alter [algorithm ={undefined | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded | local] check option]

5、更新视图

   1》insert

insert into view_name ...

   2》delete

delete from view_name ...

   3》update

update view_name set ...

  当视图包含如下内容时,视图的更新操作将不能被执行:

      1>>视图中不包含基表中被定义为非空的列。

      2>>在定义视图的select语句后的字段列表中使用使用了数学表达式。

      3>>在定义视图的select语句后的字段列表中使用聚合函数。

      4>>在定义视图的select语句中使用了distict、union、top、group by或having子句。

6、删除视图

drop view [if exists]
  view_name [,view_name] ...
  [restrict | cascade]
原文地址:https://www.cnblogs.com/ZeroMZ/p/11462750.html