MySql视图笔记(转载)
1. 视图的定义
视图就是从一个或多个表中,导出来的表,是一个虚拟存在的表。视图就像一个窗口(数据展示的窗口),通过这个窗口,可以看到系统专门提供的数据(也可以查看到数据表的全部数据),使用视图就可以不用看到数据表中的所有数据,而是只想得到所需的数据。
在数据库中,只存放了视图的定义,并没有存放视图的数据,数据还是存储在原来的表里,视图的数据是依赖原来表中的数据的,所以原来的表的数据发生了改变,那么显示的视图的数据也会跟着改变,例如向数据表中插入数据,那么在查看视图的时候,会发现视图中也被插入了同样的数据。
视图在外观上和表很相似,但是它不需要实际上的物理存储,视图实际上是由预定义的查询形式的表所组成的。
视图可以包含表的全部或者部分记录,也可以由一个表或者多个表来创建,当我们创建一个视图的时候,实际上是在数据库里执行了SELECT语句,SELECT语句包含了字段名称、函数、运算符,来给用户显示数据。
在数据库中,视图的使用方式与表的使用方式一致,我们可以像操作表一样去操作视图,或者去获取数据。
一般来说,我们只是利用视图来查询数据,不会通过视图来操作数据。
1.1 基于视图的视图
基于已存在的视图,还可以再创建视图。
1.2 视图和表的区别
视图和表的主要区别,就是看是否占用物理空间。
1.3 视图的作用
(1)选取有用的信息,筛选的作用
(2)操作简单化,所见即所需,视图看到的信息,就是需要了解的信息
(3)增加数据的安全性:查询或者修改指定的数据,非指定的数据是触碰不到的。
(4)提高逻辑的独立性
1.4 视图的特点
(1)简单性(简单化):可以展现特定的数据,而无需重复设置查询条件,简化操作。
(2)安全性:视图可以只展现数据表的一部分数据,对于我们不希望让用户看到全部数据,只希望用户看到部分数据的时候,可以选择使用视图。
(3)逻辑独立性:当真实的数据表结构发生了变化,可以通过视图来屏蔽真实表的结构变化,从而实现了视图的逻辑独立性。
视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。视图可以在以下几个方面使程序与数据独立:
①如果应用建立在数据库表上,当数据库表发生变化时,可以在表上建立视图,通过视图屏蔽表的变化,从而应用程序可以不动。
②如果应用建立在数据库表上,当应用发生变化时,可以在表上建立视图,通过视图屏蔽应用的变化,从而使数据库表不动。
③如果应用建立在视图上,当数据库表发生变化时,可以在表上修改视图,通过视图屏蔽表的变化,从而应用程序可以不动。
④如果应用建立在视图上,当应用发生变化时,可以在表上修改视图,通过视图屏蔽应用的变化,从而数据库可以不动。
2. 创建视图
CREATE VIEW 视图名称[(column_list)] AS SELECT 语句
例:
CREATE VIEW province_view AS SELECT * FROM province;
SELECT * FROM province_view;
说明:创建的视图表province_view与province表一模一样。
2.1 指定视图显示的字段:
CREATE VIEW province_view1(id,name) AS SELECT id,pro_name FROM province;
mysql> SELECT * FROM province_view1;
+-----+------+
| id | name |
+-----+------+
| 1 | 北京 |
| 2 | 上海 |
| 3 | 辽宁 |
| 4 | 天津 |
| 5 | 广东 |
| 6 | 福建 |
| 100 | 吉林 |
+-----+------+
7 rows in set (0.00 sec)
2.2 创建基于两个表的视图:
使用WHERE连接两个表:
CREATE VIEW v3(name,score) AS SELECT s_name,score FROM student,score
WHERE student.s_id=score.s_id
and score.c_id='BY';
2.3 视图的算法
ALGORITHM=
UNDEFINED:MYSQL自动选择要使用的算法
MERGE:使用视图的语句与视图的定义是合并在一起的,视图定义的某一部分取代语句对应的部分
TEMPTABLE:临时表,视图的结果存入临时表,然后使用临时表来执行语句
WHIT [CASCADED|LOCAL] CHECK OPTION:表示更新视图的时候,要保证在视图的权限范围之内:
CASCADED 默认值,表示更新视图的时候,要满足视图和表的相关条件
LOCAL:表示更新视图的时候,要满足该视图定义的一个条件即可
说明:使用WHIT [CASCADED|LOCAL] CHECK OPTION选项可以保证数据的安全性
3.创建完整的视图
CREATE ALGORITHM VIEW 视图名称[(column_list)] AS SELECT 语句
WITH [CASCADED|LOCAL] CHECK OPTION
语法提示命令:? CREATE VIEW
Name: 'CREATE VIEW'
Description:
Syntax:
CREATE
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
例子:
CREATE ALGORITHM=UNDEFINED VIEW user_view3(id,username,age) AS SELECT
id,username,age FROM users2 WITH CASCADED CHECK OPTION;
4. 查看视图
查看已创建好的视图:
4.1 查看已创建好的视图的方法:
DESC
DESCRIBE
SHOW COLUMNS FROM 视图名称
SHOW TABLE STATUS LIKE
SHOW CREATE VIEW
4.1.1 DESC
mysql> desc user_view3;
+----------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+-------+
| id | smallint(5) unsigned | NO | | 0 | |
| username | varchar(20) | NO | | NULL | |
| age | tinyint(3) unsigned | YES | | NULL | |
+----------+----------------------+------+-----+---------+-------+
3 rows in set (0.02 sec)
4.1.2 DESCRIBE
mysql> DESCRIBE user_view3;
+----------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+-------+
| id | smallint(5) unsigned | NO | | 0 | |
| username | varchar(20) | NO | | NULL | |
| age | tinyint(3) unsigned | YES | | NULL | |
+----------+----------------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
4.1.3 SHOW COLUMNS FROM 视图名称
mysql> SHOW COLUMNS FROM user_view3;
+----------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+-------+
| id | smallint(5) unsigned | NO | | 0 | |
| username | varchar(20) | NO | | NULL | |
| age | tinyint(3) unsigned | YES | | NULL | |
+----------+----------------------+------+-----+---------+-------+
3 rows in set (0.02 sec)
4.2 查看视图的基本信息(也可查看原表的信息):
SHOW TABLE STATUS LIKE ‘视图名称’;
mysql> SHOW TABLE STATUS LIKE 'province_view'\G;
*************************** 1. row ***************************
Name: province_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
1 row in set (0.00 sec)
说明:
(1) 可以从Comment: VIEW看出它是一个视图,如果是数据表,Comment选项的值为空。
(2) 因为视图是虚拟出的一张表,所以很多选项的值都是NULL,如果SHOW TABLE STATUS LIKE ‘table_name’; 那么这些选项将会显示出数值。
4.3 查看指定视图的创建信息(专门查看视图信息的命令)
SHOW CREATE VIEW 视图名称;
mysql> SHOW CREATE VIEW user_view3\G;
*************************** 1. row ***************************
View: user_view3
Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `user_view3` AS select `users2`.`id` AS `id`,`users2`.`username` AS `username`,`users2`.`age` AS `age` from `users2` WITH CASCADED CHECK OPTION
character_set_client: gbk
collation_connection: gbk_chinese_ci
1 row in set (0.00 sec)
4.4 视图数据的存储位置
mysql> SELECT * FROM information_schema.views\G
所有的视图都保存在了information_schema.views中。
4.5.修改视图:
如果视图不存在,则创建视图,如果视图存在,则修改视图:
(1)CREATE OR REPLACE VIEW 视图名称[(column_list)] AS SELECT 语句
(2)ALTER VIEW视图名称[(column_list)] AS SELECT 语句
4.5.1 CREATE OR REPLACE VIEW 视图名称[(column_list)] AS SELECT 语句
(1)例子:
CREATE OR REPLACE VIEW user_view3(id,username) AS SELECT id,username FROM users2;
(2)如果输入的视图名称不存在,这MYSQL自动创建该视图:
(3)修改视图:
CREATE OR REPLACE ALOGRITHM=TEMPTABLE VIEW user_view4(id) AS SELECT id FROM
users2;
(4)修改基于两个表的视图,两个表使用WHERE进行连接:
CREATE OR REPLACE VIEW v3 AS SELECT s_name,s_sex,score FROM student,score
WHERE student.s_id=score.s_id AND score.c_id='BY';
4.5.2 ALTER
ALTER VIEW 视图名称[(column_list)] AS SELECT 语句
ALTER VIEW user_view4(id,username,age) AS SELECT id,username,age FROM users2;
修改基于两个表的视图:
ALTER VIEW v3 AS SELECT s_name,score FROM student,score
WHERE student.s_id=score.s_id
AND score.c_id='TC';
5.更新视图
所谓更新视图,其实就是通过视图,对数据进行插入,修改和删除的操作。
5.1 修改视图的数据
注意:修改视图的数据,将直接修改数据表(即原表)的真实数据。
UPDATE v3 SET score=100 WHERE s_name='倪妮';
5.2 通过视图插入、删除数据的原理与5.1一致,均与数据表的操作语法一致
6.删除视图:
删除视图,不会影响原表的数据,但是删除视图的数据,则会影响到原表。
6.1 DROP VIEW 视图名称;
DROP VIEW 视图名称;
DROP VIEW user_view4;
6.2 DROP VIEW IF EXISTS
在删除已不存在的视图的时候,不进行任何操作:
DROP VIEW IF EXISTS视图名称;
例:
DROP VIEW IF EXISTS v1;
6.3 删除多个视图
DROP VIEW IF EXISTS v2,v3;
图形化工具的使用
1.图形化工具:
MYSQL Workbench
PHPMyAdmin
Navicat for MySQL:是一个客户端的软件,需要安装客户端的软件才能使用。
MySQL-Front
2.PHPMyAdmin
PHPMYADMIN是以Web-Base的方式,架构在网站主机上的MYSQL数据库管理工具,它是使用了WEB接口管理MYSQL数据库。
通过PHPMyAdmin可以完全地对数据库进行操作。
MySql视图笔记(转载)的更多相关文章
- MySQL全文检索笔记 转载
1. MySQL 4.x版本及以上版本提供了全文检索支持,但是表的存储引擎类型必须为MyISAM,以下是建表SQL,注意其中显式设置了存储引擎类型 CREATE TABLE articles ( id ...
- Mysql 视图笔记
1. 视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚拟存在的表.视图就像一个窗口(数据展示的窗口),通过这个窗口,可以看到系统专门提供的数据(也可以查看到数据表的全部数据),使 ...
- MySql学习笔记(转载)
. 数值类型 -- a. 整型 ---------- 类型 字节 范围(有符号位) tinyint 1字节 - ~ ...
- Mysql 视图笔记2
这学期开了数据库的课,对sql注入颇感兴趣.因此,对数据库语句也颇为喜爱.遇到了with check option 问题.这属于sql view里面的一个问题.在此略做小结.大牛勿喷! 先自定义一个t ...
- MYSQL视图的学习笔记
MYSQL视图的学习笔记,学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具 1. 视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚 ...
- Mysql学习笔记—视图
1.什么是视图 视图(View)是一种虚拟存在的表.其内容与真实的表相似,包含一系列带有名称的列和行数据.但是视图并不在数据库中以存储的数据的形式存在.行和列的数据来自定义视图时查询所引用的基本表,并 ...
- MYSQL进阶学习笔记六:MySQL视图的创建,理解及管理!(视频序号:进阶_14,15)
知识点七:MySQL视图的创建(14) 视图的定义: 什么是视图: 视图数由查询结果形成的一张虚拟的表. 什么时候要用到视图? 如果某个查询结果出现的非常频繁,也就是,要经常拿这个查询结果来做子查询. ...
- MySQL视图更新
昨天在写美团2019秋招笔试题的时候遇到了关于视图是否能更新的问题,突然感觉这个问题之前复习的时候重点关注过,但是却又想不全.今天特地搜了一些资料总结一下.本文主要说明视图的更新限制,如需关于视图的更 ...
- MySQL学习笔记一
MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...
随机推荐
- ZendFramework-2.4 源代码 - 关于MVC - View层 - 在模板内渲染子模板
<?php // 方式一: // 1.在模板内直接编写如下内容即可 $viewModel = new ViewModel(); $viewModel->setTemplate('album ...
- 第2章 CentOS7集群环境配置
目录 2.1 关闭防火墙 2.2 设置固定IP 2.3 修改主机名 2.4 添加用户 2.5 修改用户权限 2.6 新建目录 2.7 安装JDK 1.卸载系统自带的JDK 2.安装JDK 2.8 克隆 ...
- 基于python3.7的一个闯越自动签到脚本--demo版
望指正demo的定位,有时候会抽风无法接受我的定位信息 #! /usr/bin/python3 # -*- coding:UTF- -*- # time : // : # file : chuangy ...
- python3:判断手机的亮屏状态
在用python对手机做一些自动化操作时,常常会判断手机的亮屏状态,知晓手机的亮屏状态后才好做进一步的动作,如给屏幕解锁等. 用于了解手机的亮屏情况,有一个adb命令可用: adb shell du ...
- linux lvm扩容
1.分区, 查看磁盘使用:fdisk -l 对磁盘分区:fdisk /dev/sdb 2.创建pv pvcreate /dev/sdb1 查看pv: pvdisplay 3.查看vg vgdisp ...
- Hive 分析函数lead、lag实例应用
Hive的分析函数又叫窗口函数,在oracle中就有这样的分析函数,主要用来做数据统计分析的. Lag和Lead分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(Lead) ...
- HashTable, HashMap,TreeMap区别
java为数据结构中的映射定义了一个接口java.util.Map,而HashMap Hashtable和TreeMap就是它的实现类.Map是将键映射到值的对象,一个映射不能包含重复的键:每个键最多 ...
- “帮你APP”团队冲刺4
1.整个项目预期的任务量 (任务量 = 所有工作的预期时间)和 目前已经花的时间 (所有记录的 ‘已经花费的时间’),还剩余的时间(所有工作的 ‘剩余时间’) : 所有工作的预期时间:88h 目前已经 ...
- 测试环境docker化(一)—基于ndp部署模式的docker基础镜像制作
本文来自网易云社区 作者:孙婷婷 背景 我所在测试项目组目前的测试环境只有一套,在项目版本迭代过程中,开发或产品偶尔会在测试环境进行数据校验,QA人数在不断增加,各个人员在负责不同模块工作时也会产生脏 ...
- macOS Sierra 触控板无法三指拖移窗口、三指选中文字的解决方法
问题:升级macOS Sierra新系统后,发现触摸板无法进行三指拖移窗口.三指选定文字的操作.在“系统偏好设置”——“触控板”内无法进行设置. 解决:“系统偏好设置”——“辅助功能”——“鼠标与触控 ...