MySQL-快速入门(9)视图

时间:2019-09-05
本文章向大家介绍MySQL-快速入门(9)视图,主要包括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]

?

$flag 上一页 下一页