MySQL入门教程(七)之视图

相关阅读:

MySQL入门教程(五)之表的创建、修改和删除

视图是从一个或多个表中导出来的虚拟表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。

1、视图简介

1.1 视图的含义

视图是从一个或多个表中导出来的虚拟表,还可以从已经存在的视图的基础上定义。
数据库中只存放视图的定义,而不存放视图中的数据,这些数据仍存放在原来的表中。一旦表中的数据发生变化,显示在视图中的数据也会相应变化。
MySQL的视图并不支持输入参数的功能,即交互性上较差,但对于变化不是很大的操作,使用视图可以很大程度上简化用户的操作。

1.2 视图的作用

视图起着类似于筛选的作用,具体可归纳为

(1)所见即所需,使操作简单化
(2)通过视图,用户只能查询和修改指定的数据,从而限制了用户的权限,增加了数据的安全性
(3)视图可以屏蔽原有表结构变化带来的影响,从而提高了表的逻辑独立性。

2、创建视图

MySQL中,创建视图是通过Creat View语句实现的,具体为

其中,Algorithm为视图选择的算法;属性清单指定了视图中各个属性的名词,默认情况下与Select语句中查询的属性相同;Select语句是一个完整的查询语句,表示从某个表中查出某些满足条件的记录并将这些记录导入到视图中;With Check Option表示更新视图时要保证在该视图的权限范围之内,CASCADED表示更新视图时要满足所有相关视图和表的条件,为默认值,Local表示更新视图时要满足该视图本身的定义即可;注意在使用创建视图时最好加上With Check Option,并选取默认的CASCADED参数。从而保证从视图派生出来的新视图在更新后可以考虑其父视图的约束条件,即更严谨。

(1)关于Algorithm中的三个选项,Undefined选项表示MySQL将自动选择所要使用的算法,Merge选项表示将使用视图的语句与视图定义合并起来,使得视图定义的某一部分代替语句的对应部分,Temptable选项表示将视图的结果存入临时表,然后使用临时表执行语句。

(2)需要注意的是,在创建视图之前,需要检查是否具有Create view的权限和查询涉及的列的Select权限,这些权限保存在MySQL数据库下面的user表中,可以适用select语句查询,具体为

select select_priv, create_view_priv from mysql.user where user='用户名'

其中,用户名参数表示要查询哪个用户是否拥有Drop权限,在我的系统中,只有root用户。

下面是一个从department表和worker表上创建一个名为worker_view1的视图的案例

3、查看视图

查看视图必须要有show view的权限,同样保存在user表中。

查看视图的方法包括describe语句、show table status语句、show create view语句和查询information_schema数据库下的views表等。

3.1 describe语句查看简单信息

查看视图的describe语句和查看表的语句是一样的,因为视图是一种特殊的表,基本形式为

describe 视图名;

3.2 show table status语句查看基本信息

基本形式为

Show Table Status Like ‘视图名';

3.3 show create view语句查看详细信息

基本形式为

Show create view 视图名;

3.4 在views表中查看详细信息

MySQL中,所有视图的定义都存在information_schema数据库下的views表中,查询此表即可查看到数据库中所有视图的详细信息。

基本形式为

select * from information_schema.views;

其中*表示查询所有的列的信息。

显然用此语句查看到的是所有的视图,不方便查阅,一般查询详细信息时用3.3法即可。

4、修改视图

当基本表的某些字段发生改变时,有必要修改视图的定义来保持视图和基本表之间的一致性。

4.1 Create or replace view语句

此语句很好用,在存在视图情况下可对视图进行修改,在没有视图情况下,可以创建视图,具体语法为

实际上,感觉此语句就是重新定义了个视图并覆盖了原始图。<喎�"http://www.jb51.net/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoMyBpZD0="42-alter语句">4.2 Alter语句

回顾前面,alter语句不仅可以创建索引,修改表的定义,在此处,还可以修改视图的定义。
基本形式为

5、更新视图

更新视图是指通过视图来插入、更新和删除表中的数据。
更新视图时,只能更新权限范围内的数据。
实际上对视图的更新最后都是实现在基本表上的。

注意以下情况不能更新视图:

(1)视图中包含sum(),count(),max()和min()等函数

(2)视图中包含union,union all,distinct,group by和having等关键字

(3)常量视图,即视图中的某个字段时常量类型

(4)视图中的select中包含子查询

(5)由不可更新的视图导出的视图

(6)创建视图时,algorithm选择了temptable类型,即系统默认临时表是不可更新的

(7)视图对应的表上存在没有默认值的列,且该列没有包含在视图中。因为,在更新视图时,这个没有默认值的记录将没有值插入,也没有NULL值插入,系统不允许这种情况出现

由于视图的更新存在很多限制,一般,最好把视图作为查询数据的虚拟表,而不要通过视图来更新数据,很容易造成更新失败。

6、删除视图

删除视图只会删除视图的定义,并不会删除数据。DROP View语句可用来删除视图,但用户必须拥有drop的权限,具体操作为

drop view [if exists] 视图名列表 [restrict|cascade]

其中,if exists用来判断视图存在,存在才执行;在视图名列表中不同视图名称之间通过逗号隔开。

以上所述是小编给大家介绍的MySQL入门教程(七)之视图,希望对大家有所帮助!

(0)

相关推荐

  • MySQL中视图的使用及多表INNER JOIN的技巧分享

    创建视图   Sql代码 CREATE VIEW view_name AS SELECT t1.xxx, t2.xxx, t3.xxx FROM (table1 t1 INNER JOIN table2 t2 ON t1.fid = t2.fid) INNER JOIN table3 t3 ON t1.mid = t3.mid; 这里使用了3表关联,对于多表关联的 INNER JOIN 写法有一个技巧 1. 先写最简单的2表关联 INNER JOIN 2. 然后使用 () 从 FROM 之后到语

  • MySQL笔记之视图的使用详解

    什么是视图 视图是从一个或多个表中导出来的表,是一种虚拟存在的表. 视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据. 这样,用户可以不用看到整个数据库中的数据,而之关心对自己有用的数据. 数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中. 使用视图查询数据时,数据库系统会从原来的表中取出对应的数据. 视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变. 视图的作用 1.使操作简单化,可以对经常使用的查询定义一个视图,使用户

  • MySQL 视图 第1349号错误解决方法

    复制代码 代码如下: CREATE OR REPLACE VIEW BLOG_V_ADMIN  (ID,NICKNAME,SEX,EMAIL,PHONE,QQ,MSN,HTTP,REGISTER_TIME,  IP,LAST_LOGIN_IP,LOGIN_TIME)  AS  SELECT   A.ID,A.NICKNAME,A.SEX,A.EMAIL,A.PHONE,A.QQ,A.MSN,A.HTTP,A.REGISTER_TIME,   B.IP AS LAST_LOGIN_IP,B.LOG

  • 详解Mysql中的视图

    视图: mysql中的视图,视图与表有很多相似的地方,视图也是由若干个字段以及若干条记录构成,视图也可以作为select语句的数据源. 视图中保存的仅仅是一条select语句,保存的是视图的定义,并没有保存真正的数据.视图中的源数据都来自于数据库表,数据库表称为基本表或者基表,视图称为虚表. 1.创建视图 创建视图的语法格式如下. create view 视图名 [ (视图字段列表) ] as select语句 例: create view t (id,name,age,sex) as sele

  • mysql触发器实现oracle物化视图示例代码

    oracle数据库支持物化视图--不是基于基表的虚表,而是根据表实际存在的实表,即物化视图的数据存储在非易失的存储设备上. 下面实验创建ON COMMIT 的FAST刷新模式,在mysql中用触发器实现insert , update , delete 刷新操作 1.基础表创建,Orders 表为基表,Order_mv为物化视图表 复制代码 代码如下: mysql> create table Orders( -> order_id int not null auto_increment, -&g

  • MySQL入门教程(七)之视图

    相关阅读: MySQL入门教程(五)之表的创建.修改和删除 视图是从一个或多个表中导出来的虚拟表.视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据. 1.视图简介 1.1 视图的含义 视图是从一个或多个表中导出来的虚拟表,还可以从已经存在的视图的基础上定义. 数据库中只存放视图的定义,而不存放视图中的数据,这些数据仍存放在原来的表中.一旦表中的数据发生变化,显示在视图中的数据也会相应变化. MySQL的视图并不支持输入参数的功能,即交互性上较差,但对于变化不是很大的操作,使用视图可以很大

  • 21分钟 MySQL 入门教程

    21分钟 MySQL 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数据类型 五.使用MySQL数据库 登录到MySQL 创建一个数据库 选择所要操作的数据库 创建数据库表 六.操作MySQL数据库 向表中插入数据 查询表中的数据 更新表中的数据 删除表中的数据 七.创建后的修改 添加列 修改列 删除列 重命名表 删除整张表 删除整个数据库 八.附录 修改 root

  • Go语言七篇入门教程七GC垃圾回收三色标记

    目录 GC 如何判断一个对象是否可达 三色标记法 原理如下 GC GC全称Garbage Collection 目前主流的垃圾回收算法有两类,分别是追踪式垃圾回收算法(Tracing garbage collection)和引用计数法( Reference counting ). 而三色标记法是属于追踪式垃圾回收算法的一种. 追踪式算法的核心思想是判断一个对象是否可达,因为一旦这个对象不可达就可以立刻被 GC 回收了. 如何判断一个对象是否可达 分为两步: 第一步找出所有的全局变量和当前函数栈里

  • AngularJS入门教程之多视图切换用法示例

    本文实例讲述了AngularJS多视图切换用法.分享给大家供大家参考,具体如下: 在AngularJS应用中,我们可以將html碎片写在一个单独的文件中,然后在其他页面中將该段碎片加载进来.如果有多个碎片文件,我们还可以在控制器中根据用户的操作动态的加载不同的碎片,从而达到切换视图的效果. 先来看看笔者写好的一个案例吧: 这两首词实际上是两个html碎片,分别写在page1.html和page2.html.下面是这两个文件的内容: <!--page1.html内容--> <div>

  • MySQL入门教程(五)之表的创建、修改和删除

    MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成. 表是DB存储数据的基本单位,一个表包含若干个字段或记录.表的操作包括创建.修改和删除. 1.创建表 创建表即在已存在的数据库中创立新表.在使用USE语句选择具体数据库后,可以使用它SQL语句创建表 其中,属性名指表中字段的名称,数据类型即对应字段的数据类型,完整性约束条件指

  • MySQL分区表的基本入门教程

    前言 在最近的项目中,我们需要保存大量的数据,而且这些数据是有有效期的,为了提供查询效率以及快速删除过期数据,我们选择了MySQL的分区机制.把数据按照时间进行分区. 分区类型 Range分区:最为常用,基于属于一个给定连续区间的列值,把多行分配给分区.最常见的是基于时间字段. 基于分区的列最好是整型,如果日期型的可以使用函数转换为整型. List分区:LIST分区和RANGE分区类似,区别在于LIST是枚举值列表的集合,RANGE是连续的区间值的集合. Hash分区:基于给定的分区个数,将数据

  • Go语言七篇入门教程六网络编程

    目录 1. Socket 编程 1.1 Dial()函数 2. HTTP 编程 2.1 HTTP 客户端 2.2 HTTP 服务端 2.2.1 处理 HTTP 请求 3. RPC 编程 3.1 Go 语言中的 RPC 支持与处理 3.2 Gob 简介 3.3 设计优雅的 RPC 接口 1. Socket 编程 在 Go 语言中编写网络程序时,我们将看不到传统的编码形式.以前我们使用 Socket 编程时,会按照如下步骤展开. 建立 Socket:使用 socket()函数. 绑定 Socket:

  • Go语言七篇入门教程五文件及包

    目录 1. 文件处理 1.1 JSON文件 1.1.1 已知JSON结构 1.1.2 未知JSON结构 1.1.3 Encoder & Decoder 1.2 XML文件 1.3 二进制文件 1.4 zip文件 1.4.1 创建zip 1.4.2 读取zip文件 2. 包管理 2.1 包路径 2.2 包声明 如何学习Go 1. 文件处理 1.1 JSON文件 什么是json? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 也是在web开发中的前后

  • Go语言七篇入门教程四通道及Goroutine

    目录 1. 前言 2. 通道简介 2.1 声明 2.1 读写 2.3 通道详解 2.3.1 例子 2.3.2 死锁 2.3.3 关闭通道 2.3.4 缓冲区 2.3.5 通道的长度和容量 2.3.6 单向通道 2.3.7 Select 2.3.8 default case 块 2.3.9 空 select 2.3.10 Deadlock 2.3.11 nil通道 2.4 多协程协同工作 2.5 WaitGroup 2.5.1 简介 2.5.2工作池 2.5.3 Mutex 3. 结语 如何学习G

  • Go语言七篇入门教程三函数方法及接口

    目录 1. 函数 2. 方法 3. 接口 如何学习Go 参考书籍: <go语言程序设计> 1. 函数 每个函数声明都包含一个名字,一个形参列表,一个可选的返回列表以及函数体: func name(parameter-list)(result-list){ body } 形参列表:指定另一组变量的参数名和参数类型,这些局部变量都由调用者提供的提供的实参传递而来的. 返回列表:指定了函数返回值的类型.当函数返回一个未命名的返回值或者没有返回值的时候,返回列表的圆括号可以忽略. func FanOn

随机推荐