mysql 视图(view)
什么是视图
视图是从一个或多个表中导出来的表,是一种虚拟存在的表。
视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。
这样,用户可以不用看到整个数据库中的数据,而之关心对自己有用的数据。
数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中。
使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。
视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变。
视图的作用
1.使操作简单化,可以对经常使用的查询定义一个视图,使用户不必为同样的查询操作指定条件
2.增加数据的安全性,通过视图,用户只能查询和修改指定的数据。
3.提高表的逻辑独立性,视图可以屏蔽原有表结构变化带来的影响。
总而言之,使用视图的大部分情况是为了保障数据安全性,提高查询效率
创建视图的语法
CREATE [ALGORITHM]={UNDEFINED|MERGE|TEMPTABLE}]
VIEW 视图名 [(属性清单)]
AS SELECT 语句
[WITH [CASCADED|LOCAL] CHECK OPTION];
ALGORITHM表示视图选择的算法(可选参数)
UNDEFINED:MySQL将自动选择所要使用的算法
MERGE:将视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分
TEMPTABLE:将视图的结果存入临时表,然后使用临时表执行语句
视图名表示要创建的视图的名称
属性清单表示视图中的列名,默认与SELECT查询结果中的列名相同(可选参数)
WITH CHECK OPTION表示更新视图时要保证在该试图的权限范围之内(可选参数)
CASCADED:更新视图时要满足所有相关视图和表的条件
LOCAL:更新视图时,要满足该视图本身定义的条件即可
tips:创建试图时最好加上WITH CASCADED CHECK OPTION参数,这种方式比较严格 可以保证数据的安全性
视图操作
在单表上创建视图
mysql> CREATE VIEW work_view(ID,NAME,ADDR) AS SELECT id,name,address FROM work; Query OK, rows affected (0.05 sec)
此处work_view为视图名,后面括号内的参数代表视图中的列
AS表示将后面SELECT 语句中的查询结果赋给前面的视图中
在多表上创建视图
mysql> CREATE ALGORITHM=MERGE VIEW work_view2(ID,NAME,SALARY) -> AS SELECT work.id,name,salary FROM work,salary -> WHERE work.id=salary.id -> WITH LOCAL CHECK OPTION; Query OK, rows affected (0.02 sec)
在多表中创建视图需要两表有指定联系,如上面的work.id=salary.id
SELECT查询视图
mysql> SELECT * FROM work_view; +----+--------+--------+ | ID | NAME | ADDR | +----+--------+--------+ | 张三 | 北京 | | 李四 | 上海 | | 王五 | 湖南 | | 赵六 | 重庆 | +----+--------+--------+ rows in set (0.00 sec)
此处的SELECT语句用法和其他表中的用法一样 别忘了,视图也是一张表,只不过它是虚拟的
DESCRIBE查看视图基本信息
mysql> DESCRIBE work_view; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ ) | NO | | NULL | | ) | NO | | NULL | | ) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ rows in set (0.00 sec)
与以往一样,此处的DESCRIBE可以简写为DESC
SHOW TABLE STATUS查看视图基本信息
mysql> SHOW TABLE STATUS LIKE 'work_view'\G . row *************************** Name: work_view Engine: NULL Version: NULL Row_format: NULL Rows: NULL Avg_row_length: NULL Data_length: NULL Max_data_length: NULL Index_length: NULL Data_free: NULL Auto_increment: NULL Create_time: NULL Update_time: NULL Check_time: NULL Collation: NULL Checksum: NULL Create_options: NULL Comment: VIEW row in set (0.00 sec)
此处大部分信息显示为NULL,更加说明了视图只是一张虚拟表
如果使用SHOW TABLE STATUS查看一张真实表,结果就不会如此
SHOW CREATE
VIEW查看视图详细信息
mysql> SHOW CREATE VIEW work_view\G . row *************************** View: work_view Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `work_view` AS select `work`.`id` AS `ID`,`work`.`name` AS `NAME`,`work`.`address` AS `ADDR` from `work` character_set_client: utf8 collation_connection: utf8_general_ci row in set (0.00 sec)
尼玛好复杂,这里包含了视图的各个属性
在views表中查看视图详细信息
mysql> SELECT * FROM information_schema.views\G . row *************************** TABLE_CATALOG: def TABLE_SCHEMA: person TABLE_NAME: work_view VIEW_DEFINITION: select `person`.`work`.`id` AS `ID`,`person`.`work`.`name` AS `NAME`,`person`.`work`.`address` AS `ADDR` from `person`.`work` CHECK_OPTION: NONE IS_UPDATABLE: YES DEFINER: root@localhost SECURITY_TYPE: DEFINER CHARACTER_SET_CLIENT: utf8 COLLATION_CONNECTION: utf8_general_ci . row *************************** TABLE_CATALOG: def TABLE_SCHEMA: person TABLE_NAME: work_view2
information_schema.views表内包含了所有的视图定义信息
不过,通常使用SHOW CREATE VIEW 更加方便
这里信息太长,没有完全列举……
修改视图
修改视图是指修改数据库中已存在的表的定义,当基本表的某些字段发生改变时,可以通过修改视图来保持视图和基本表之间一致
CREATE
OR REPLACE VIEW语句修改视图
mysql> CREATE OR REPLACE ALGORITHM=TEMPTABLE -> VIEW work_view(ID,NAME) -> AS SELECT id,name FROM work; Query OK, rows affected (0.03 sec)
话说,CREATE OR REPLACE语句非常灵活
在视图存在的情况下可对视图进行修改,视图不在的情况下可创建视图
其基本用法和CREATE VIEW 几乎一致
ALTER语句修改视图
mysql> ALTER VIEW work_view2(NAME,SALARY,ADDR) -> AS SELECT name,salary,address FROM work,salary -> WHERE work.id=salary.id; Query OK, rows affected (0.03 sec)
我这把名字、工资和地址当做字段修改了视图
如果是真实的话,对小偷来说极为方便
更新视图
更新视图是指通过视图来插入、更新和删除表中的数据,以为视图是一个虚拟表,其中木有数据
通过视图更新时,都是转换到基本表来更新
mysql> UPDATE work_view2 SET SALARY=5899.00 WHERE NAME='张三'; Query OK, row affected (0.03 sec) Rows matched: Changed: Warnings:
此处语句等价于
mysql;
tips:视图中虽然可以更新数据,但是有很多限制。 一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图更新数据
删除视图
删除视图是指删除数据库中已存在的视图,删除视图时,只能删除视图的定义,不会删除数据
mysql> DROP VIEW IF EXISTS work_view; Query OK, rows affected (0.00 sec) mysql> DROP VIEW work_view2; Query OK, rows affected (0.01 sec)
mysql 视图(view)的更多相关文章
- MySQL视图view/存储过程和函数的使用
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...
- 深入解析MySQL视图view
阅读目录---深入解析MySQL视图view 创建视图 查看视图 视图的更改 create or replace view alter DML drop 使用with check option约束 嵌 ...
- MySQL视图(view)
一.基本概念 视图是一个虚拟表,是sql的查询结果,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成.视图的数据变化会影响到基表,基表的数据变化也会影响到视图 ...
- 转: mysql create view 创建视图
以下的文章主要是对MySQL视图的描述,其中包括MySQ视图L概述,以及创建MySQL视图-create view与修改MySQL视图--alter view等相关内容的具体描述,以下就是文章的具体内 ...
- MySQL/MariaDB数据库的视图(VIEW)
MySQL/MariaDB数据库的视图(VIEW) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.视图概述 1>.什么是视图 视图就是一个虚拟的表,保存有实表的查询结果 ...
- MySQL 视图的基础操作(五)
1.为什么使用视图: 为了提高复杂SQL语句的复用性和表操作的安全性(例如:工资字段不想展示给所有能查看该查询结果的人),MySQL提供了视图特性.所谓视图,本质上是一种虚拟表,其内容与真实的 ...
- Mysql视图的作用及其性能分析
定义:视图是从一个或几个基本表导出的表,它与基本表不同,是一个虚表. 作用: 1.简化操作,不用进行多表查询. 2.当不同种类的用用户共享同一个数据库时,非常灵活,(用户以不同的 方式看待同一数据. ...
- MYSQL视图的学习笔记
MYSQL视图的学习笔记,学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具 1. 视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚 ...
- MySQL 视图技术
以前也只是知道数据库中有视图这么个概念,但是没有去深究,今天正好有时间,就来总结一下吧. 视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚拟存在的表.视图就像一个窗口(数据展示的窗口),通过 ...
随机推荐
- python多进程共享变量Value使用tips
前言: 在使用tornado的多进程时,需要多个进程共享一个状态变量,于是考虑使用multiprocessing.Value(对于该变量的具体细节请查阅相关资料).在根据网上资料使用Value时,由于 ...
- 信息安全系统设计基础_exp3
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1353 姓名:吴子怡.郑伟 学号:20135313.20135322 指导教师: 娄嘉鹏 实验 ...
- MVC5 + EF6 + Bootstrap3 (13) 查看详情、编辑数据、删除数据
Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-rud.html 系列教程:MVC5 + EF6 + Boo ...
- WebAPI2使用Autofac实现IOC属性注入完美解决方案
一.前言 只要你是.NETer你一定IOC,IOC里面你也会一定知道Autofac,上次说了在MVC5实现属性注入,今天实现在WebApi2实现属性注入,顺便说一下autofac的程序集的注入方式,都 ...
- Django1.8教程——从零开始搭建一个完整django博客(二)
在上一节中,我们已经创建了一个Django模型Post,并使Post模型与数据库同步.这一节中,我们将介绍Django管理站点,通过Django管理站点来管理我们创建的Post模型实例. 为你的模型创 ...
- 如何使用开源库,吐在VS2013发布之前,顺便介绍下VS2013的新特性"Bootstrap"
刚看到Visual Studio 2013 Preview - ASP.NET, MVC 5, Web API 2新功能搶先看 看了下VS2013带来的"新特性",直觉上看,除了引 ...
- Mtk Ft6306 touch 驱动 .
1.1. MTK Touch 驱动的组成Mtk Touch driver 驱动包括:Mtk platform 虚拟平台设备驱动.Module touch IC 驱动.Input subsys ...
- NoSQL数据库之国产开源产品:SequoiaDB 分析前言
随着互联网技术的发展,面对海量数据的存储和分析,传统关系型数据库已经无法满足,由此衍生出一种与关系型数据库区别开的数据库NoSQL(Not Only SQL). 国外做的比较成熟的NoSQL有Mong ...
- Javascript基础系列之(五)条件语句(if条件语句)
if 是flash的常用语法之一,其格式如下 if(coditon) statement1 (else statement2) 其中,coditon可以是任何表达式,甚至不比是真正的布尔值,因为Jav ...
- mysql-5.7.9-winx64 MySQL服务无法启动,服务没有报告任何错误的解决办法
问题背景 最新解压版本的mysql 解压安装的时候报错 D:\mysql-5.7.9-winx64\bin>net start mysql MySQL 服务正在启动 . MySQL 服务无法启动 ...