关系型数据库中的数据是由一张一张的二维关系表所组成,简单的单表查询只需要遍历一个表,而复杂的多表查询需要将多个表连接起来进行查询任务。对于复杂的查询事件,每次查询都需要编写MySQL代码效率低下。为了解决这个问题,数据库提供了视图(view)功能。

0 视图相关的MySQL指令

操作指令 代码
创建视图 CREATE VIEW 视图名(列1,列2...) AS SELECT (列1,列2...) FROM ...;
使用视图 当成表使用就好
修改视图 CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...];
查看数据库已有视图 >SHOW TABLES [like...];(可以使用模糊查找)
查看视图详情 DESC 视图名或者SHOW FIELDS FROM 视图名
视图条件限制 [WITH CHECK OPTION]

1 视图

百度百科定义了什么是视图,但是对缺乏相关知识的人可能还是难以理解或者只有一个比较抽象的概念,笔者举个例子来解释下什么是视图。

朕想要了解皇宫的国库的相关情况,想知道酒窖有什么酒,剩多少,窖藏多少年,于是派最信任的高公公去清点,高公公去国库清点后报给了朕;朕又想知道藏书情况,于是又派高公公去清点并回来报告给朕,又想知道金银珠宝如何,又派高公公清点。。。过一段时间又想知道藏书情况,高公公还得重新再去清点,皇上问一次,高公公就得跑一次路。

后来皇上觉得高公公不容易,就成立了国库管理部门,小邓子负责酒窖,小卓子负责藏书,而小六子负责金库的清点。。。后来皇上每次想了解国库就直接问话负责人,负责人就按照职责要求进行汇报。

安排专人管理后,每次皇上想要了解国库情况,就不必让高公公每次都跑一趟,而是指定的人员按照指定的任务完成指定的汇报工作就可以了。

和数据库相对应,每次进行查询工作,都需要编写查询代码进行查询;而视图的作用就是不必每次都重新编写查询的SQL代码,而是通过视图直接查询即可。因此:

视图是虚拟表,本身不存储数据,而是按照指定的方式进行查询。

比如,我们希望从前文提到的四张表,order_baisc,order_details,user和product中查找所有记录,需要写入代码指令:

想再次查询这几个表中uid为u0001的用户的记录,有需要键入一次操作指令:

也就是说,每次查询都得重新键入查询指令SQL代码,这种费时费力的体力活,对于时间就是生命的你我来说,是不划算的。所以借助视图,来执行相同或相似的查询。

2 创建视图

2.1 创建视图create view
创建视图的代码为:

>CREATE VIEW 视图名(列1,列2...)
AS SELECT (列1,列2...)
FROM ...;
  • 1
  • 2
  • 3

可以看到,创建视图和查询相比,增加了前面的CREATE VIEW 视图名 AS

2.2 视图运用

使用视图和使用表完全一样,只需要把视图当成一张表就OK了。视图是一张虚拟表。

eg:创建order_baisc,order_details,user和product的查询视图,并通过视图查找uid为u0001的记录:

2.3 修改视图CREATE OR REPLACE VIEW

修改和创建视图可以使用代码:

CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...];
  • 1

eg:

2.4 查看视图
(1)查看数据库中有哪些视图 show tables
前面提到,视图就是虚拟的表,因此,查看视图的方法和查看表的方法是一样的:

>SHOW TABLES;
  • 1

通过show tables;反馈得到所有的表和视图。同样的,我们可以通过模糊检索的方式专门查看视图,这个时候,视图的命令统一采用v_视图名的优势就体现出来了。
(2)查看视图详情
查看视图详情的方法有两种,一种是和查看表详情一样使用desc 视图名,另外一种方法是show fields from 视图名

>DESC 视图名;
或者
>SHOW FIELDS FROM 视图名;
  • 1
  • 2
  • 3

两种方法得到的详情都是一毛一样的。

3 视图与数据变更

3.1 表格数据变更
将表product中的数据进行更新,在通过视图检索:

可以看到表格数据变化后,在通过视图检索,得到的结果也同步发生了变化,因此,在此证明了:

视图不是表,不保存数据,知识一张虚拟表;

3.2 通过视图变更数据

  • (1)插入数据
>INSERT INTO v_order(pid,pname,price) VALUES('p010','柴油','34');
  • 1

在此查询视图,发现插入了数据。

  • (2)跨表插入数据
    通过上图,我们可以看到,跨表插入数据系统反馈报错,提示不能修改超过一个表的数据。

因此,可以通过视图插入数据,但是只能基于一个基础表进行插入,不能跨表更新数据。

  • (3)WITH CHECK OPTION
    如果在创建视图的时候制定了“WITH CHECK OPTION”,那么更新数据时不能插入或更新不符合视图限制条件的记录。

    eg:对表product创建一个单价超过3000的视图,并加上“WITH CHECK OPTION”,之后插入一个价格为42的记录:

    可以看到系统提示错误CHECK OPTION FAILED。因为视图限制了价格要高于3000.
    后面再次尝试了不加“WITH CHECK OPTION”的视图,后者可以成功插入。

    同样的,在不加“WITH CHECK OPTION”的情况下,通过视图修改记录,也可以成功执行:

通过视图修改,可能导致数据无故消失,因此:

mysql 试图的更多相关文章

  1. mysql数据类型

    一.数值类型 Mysql支持所有标准SQL中的数值类型,其中包括严格数据类型(INTEGER,SMALLINT,DECIMAL,NUMBERIC),以及近似数值数据类型(FLOAT,REAL,DOUB ...

  2. Mysql支持的数据类型(总结)

    一.数值类型 Mysql支持所有标准SQL中的数值类型,其中包括严格数据类型(INTEGER,SMALLINT,DECIMAL,NUMBERIC),以及近似数值数据类型(FLOAT,REAL,DOUB ...

  3. MySQL 数据类型 详解

    MySQL 数据类型 详解 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 My ...

  4. MySQL支持的数据类型

    1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节 范围(-128~127) smallint(m) 2个字节 范围(-32768~32767) mediumint(m) 3 ...

  5. MySQL性能优化的最佳经验,随时补充

    1.为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存 ...

  6. MySql数据类型(转)

    数值类型 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指 ...

  7. MySQL 的数值数据类型

    MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段 ...

  8. MySQL 数据类型 详解 (转载)

    数值类型 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指 ...

  9. 【mysql的设计与优化专题(3)】字段类型与合理的选择字段类型

    本篇博客稍微有点长,它实际上包括两个内容:一是mysql字段类型的介绍,二是在mysql建表过程中是如何正确选择这些字段类型; 字段类型 数值 MySQL 的数值数据类型可以大致划分为两个类别,一个是 ...

随机推荐

  1. java的Date() 转换符

    本字段下均转自 csdn 阿念1989 本文是学习网络上的文章时的总结,感谢大家无私的分享. System.out.printf()方法可以对日期做处理输出. 对应列表 转换符 类型 举例 c 完整的 ...

  2. C#学习笔记(六):循环嵌套、复杂数据类型和枚举

    复杂数据类型 默认情况:0,1,2,3 赋值情况:0,3,4,5://修改初始值,后面都会改变 定义在class外面,作用域更大 定义在class里面(类种类),只能在类里使用 枚举作用:方便把不同角 ...

  3. Python四大主流网络编程框架

    目前的4种主流Python网络框架:Django.Tornado.Flask.Twisted.

  4. A_Pancers团队项目设计完善&编码测试

    1:根据OOD详细设计工作要点,修改完善团队项目系统设计说明书和详细设计说明 我们在项目真正开发与测试的过程当中发现我们的项目开发流程不是很明确,我们对于软件开发流程和功能分布做了补充和完善,并且认为 ...

  5. Cocoapods 报警告Automatically assigning platform ios with version 9.0 on target....

    Automatically assigning platform iOS with version 9.0 on target 你的工程名称 because no platform was speci ...

  6. 44 CSS 浮动 模态框 定位

    一.浮动 float : 浮动的盒子不占原来的位置,其下方的盒子会上移 父盒子会发生塌陷现象.同一级盒子right浮动,同级左边的盒子需要左浮动,right浮动的盒子才能上来 由于浮动框不在文档的普通 ...

  7. bzoj2763: [JLOI2011]飞行路线 最短路

    题意:求最多可以有k条路免费的最短路 题解:用dis[x][k]表示从s开始用了k次免费机会到x的最短路,然后dij跑的时候优先队列里多维护一个k就好了 /********************** ...

  8. bzoj3262: 陌上花开 三维偏序cdq分治

    三维偏序裸题,cdq分治时,左侧的x一定比右侧x小,然后分别按y排序,对于左侧元素按y大小把z依次插入到树状数组里,其中维护每个左侧元素对右侧元素的贡献,在bit查询即可 /************* ...

  9. POJ-2415 Hike on a Graph (BFS)

    Description "Hike on a Graph" is a game that is played on a board on which an undirected g ...

  10. HTML5绘制几何图形

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head>    < ...