博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql view(视图)
阅读量:5128 次
发布时间:2019-06-13

本文共 2854 字,大约阅读时间需要 9 分钟。

一,什么是视图

视图是存放数据的一个接口,也可以说是虚拟的表。这些数据可以是从一个或几个基本表(或视图)的数据。也可以是用户自已定义的数据。其实视图里面不存放数据的,数据还是放在基本表里面,基本表里面的数据发生变动时,视图里面的数据随之变动。

二,视图有什么用

1,视图可以让查询变得很清楚

如果您要找的数据存放在三张关系表里面,查看数据的时候,你就要写个联合查询了。换种方法,我把联合查询的数据放到视图里面,这样查询起来是不是更方便呢,通phpmyadmin看着是不是更清淅呢。

2,保护数据库的重要数据,给不同的人看不同的数据

假如您让别人帮您开发一套系统,但是你又想把真正表的暴露出来,这个时候视图是不是最好的选择呢。

三,视图的类型

mysql的视图有三种类型:MERGE、TEMPTABLE、UNDEFINED。如果没有ALGORITHM子句,默认算法是UNDEFINED(未定义的)。算法会影响MySQL处理视图的方式。

1,MERGE,会将引用视图的语句的文本与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。

2,TEMPTABLE,视图的结果将被置于临时表中,然后使用它执行语句。

3,UNDEFINED,MySQL将选择所要使用的算法。如果可能,它倾向于MERGE而不是TEMPTABLE,这是因为MERGE通常更有效,而且如果使用了临时表,视图是不可更新的。

四,添加视图

1,添加规则

1 REATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]  2   3  VIEW view_name [(column_list)]  4   5  AS select_statement  6   7  [WITH [CASCADED | LOCAL] CHECK OPTION]

2,实例

mysql> use test;  Database changed  mysql> create  algorithm = MERGE view aaa as select * from user;//创建一个视图  Query OK, 0 rows affected (0.00 sec)

上面我们说了,视图里面没有真正的数据,那在数据仓库里面,他的存储是什么样子的呢。看下面

1 [root@BlackGhost test]# cat /usr/local/mysql/data/test/aaa.frm   2 TYPE=VIEW   3 query=select `test`.`user`.`id` AS `id`,`test`.`user`.`name` AS `name`,`test`.`user`.`sex` AS `sex` from `test`.`user`   4 md5=04d5ab2cc3ffcf3376a5e9c946f858ab   5 updatable=1   6 algorithm=2   7 definer_user=   8 definer_host=   9 suid=2  10 with_check_option=0  11 revision=1  12 timestamp=2010-10-20 19:59:34  13 create-version=1  14 source=select * from user  15 client_cs_name=utf8  16 connection_cl_name=utf8_general_ci  17 view_body_utf8=select `test`.`user`.`id` AS `id`,`test`.`user`.`name` AS `name`,`test`.`user`.`sex` AS `sex` from `test`.`user`

创建的视图,他没有.MYD,.MYI这二个文件,一个是存放数据的,一个存放索引的。在这儿就可以说明数据是存在基本表里面的。

五,修改视图

1,修改规则

1 ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]  2   3  VIEW view_name [(column_list)]  4   5  AS select_statement  6   7  [WITH [CASCADED | LOCAL] CHECK OPTION]

2,实例

1 mysql> alter view aaa as select * from user where id <> any  2  -> (select u_id from comment);  3 Query OK, 0 rows affected (0.00 sec)

六,查看,删除视图

1 mysql> select * from aaa;    //查看视图数据   2 +----+------+-----+   3 | id | name | sex |   4 +----+------+-----+   5 |  3 | tank |   0 |   6 |  4 | tank |   0 |   7 +----+------+-----+   8 2 rows in set (0.00 sec)   9   10 mysql> show create view aaa\G;  //查看视图  11 *************************** 1. row ***************************  12  View: aaa  13  Create View: CREATE ALGORITHM=MERGE DEFINER=``@`` SQL SECURITY DEFINER VIEW `aaa` AS select `user`.`id` AS `id`,`user`.`name` AS `name`,`user`.`sex` AS `sex` from `user` where `user`.`id` <> any (select `comment`.`u_id` AS `u_id` from `comment`)  14 character_set_client: utf8  15 collation_connection: utf8_general_ci  16 1 row in set (0.00 sec)  17   18 mysql> drop view aaa;   //删除视图  19 Query OK, 0 rows affected (0.00 sec)  20

 

转载于:https://www.cnblogs.com/billyu/p/5043173.html

你可能感兴趣的文章
leetcode-Sort List
查看>>
中文词频统计
查看>>
了解node.js
查看>>
想做移动开发,先看看别人怎么做
查看>>
Eclipse相关集锦
查看>>
虚拟化架构中小型机构通用虚拟化架构
查看>>
继承条款effecitve c++ 条款41-45
查看>>
Java泛型的基本使用
查看>>
1076 Wifi密码 (15 分)
查看>>
noip模拟赛 党
查看>>
bzoj2038 [2009国家集训队]小Z的袜子(hose)
查看>>
Java反射机制及其Class类浅析
查看>>
Postman-----如何导入和导出
查看>>
移动设备显示尺寸大全 CSS3媒体查询
查看>>
图片等比例缩放及图片上下剧中
查看>>
【转载】Linux screen 命令详解
查看>>
background-clip,background-origin
查看>>
Android 高级UI设计笔记12:ImageSwitcher图片切换器
查看>>
【Linux】ping命令详解
查看>>
对团队成员公开感谢博客
查看>>