相关阅读:

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

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语句

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

实际上,感觉此语句就是重新定义了个视图并覆盖了原始图。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用来判断视图存在,存在才执行;在视图名列表中不同视图名称之间通过逗号隔开。

c mysql 视图_MySQL入门教程(七)之视图相关推荐

  1. Mysql数据库基础入门教程

    Mysql数据库基础入门教程 课程链接:https://www.bilibili.com/video/BV1Qb411x7Yc?p=1 2022/1/22start 一.数据库简介 1.什么是数据库? ...

  2. mysql数据库入门教程(11):视图讲解大全

    一.视图的介绍 含义:虚拟表,和普通表一样使用 mysql5.1版本出现的新特性,是通过表动态生成的数据 举例说明什么是视图:假设一个年级有10个班,上面有领导来啦,说要检查舞蹈功底,学校为了应付检查 ...

  3. MySQL数据库新手入门教程

    相信很多做数据分析的朋友都发现,在平时做业务分析中,Excel表格是我们使用最频繁的工具.我们还发现,Excel虽然好用,但一旦数据量大了起来,比如处理二三十万条或以上数据量的时候,就会出现卡顿,甚至 ...

  4. MySQL Connector/C++入门教程(上)

    转载原文:http://blog.csdn.net/jgood/article/details/5661339 原文地址: http://dev.mysql.com/tech-resources/ar ...

  5. mysql 基础视图_MySQL基础(4) | 视图

    MySQL基础(4) | 视图 基本语法 1.创建 CREATE VIEW AS 语法说明如下. :指定视图的名称.该名称在数据库中必须是唯一的,不能与其他表或视图同名. :指定创建视图的 SELEC ...

  6. 图像设定阈值二值matlab,“图像类型转换II——使用“导入、导出和转换”中的“阈值法”转换为二值图像”,MATLABImageProcessingToolbox,入门教程,七,之...

    1 imbinarize函数 在 [MATLAB Image Processing Toolbox 入门教程二]快速入门之"亮度校正"和"目标识别" 中我们已经 ...

  7. mysql 低端_mysql入门

    相关了解(重点内容从标题一开始) 目前主流数据库有: sqlserver, mysql, Qracle, SQLite, Access, MS SQL Server等, 我主要说的是mysql; 以下 ...

  8. mysql指南_MySQL入门指南

    MySQL入门指南,希望对大家用处!! 一.SQL速成 以下是一些重要的SQL快速参考,有关SQL的语法和在标准SQL上增加的特性,请查询MySQL手册. 1.创建表 表是数据库的最基本元素之一,表与 ...

  9. 简单php修改mysql数据类型_MySQL入门很简单—MySQL数据类型

    MySQL入门很简单---MySQL数据类型 一.整数类型: //类型名称字节数(长度)无符号数的取值范围有符号的取值范围 TINYNIT 1 (4)0~255-128~127 SMALLINT2 ( ...

最新文章

  1. 终于有人把数据、信息、算法、统计、概率和数据挖掘都讲明白了!
  2. Gut Microbes l 锻炼或会增加机体内源性大麻素水平和改变肠道菌群从而降低机体慢性炎症!...
  3. 如何使用万用表测量随机噪声
  4. 腾讯在线教育小程序开发实践之路
  5. CRM Fiori pipeline应用的背景色问题
  6. idea 2018.1 创建springboot开启找回Run Dashboard
  7. dlog()是什么意思 matlab语言,Matlab
  8. Java怎么不启动_dubbo不启动了怎么回事???一模一样的另一个没问题
  9. 直男不懂女人心?10953 条数据告诉你女王节送什么口红色号!
  10. 18 比较数组找出最大两个数
  11. 21.实例 --- location
  12. 流程图神器——代码转流程图软件、在线流程图绘制软件
  13. 卖家警惕 网购新骗术来袭
  14. TestNG单元测试框架详解
  15. SEP8266 由零开始(一),最小系统,下载,与WiFi建立
  16. mysql数据封装是什么_MySql数据封装操作类
  17. 如何用牛顿迭代法求平方根
  18. 河北欧格教育:主图构图法
  19. 借一道leetcode思考总结map/set的应用及区别
  20. 使用Haskell和Hubris加强Ruby

热门文章

  1. java中一个线程最小优先数_Java线程的优先级
  2. java将一个对象赋值给另一个对象_java一个对象赋值给另一个对象,支持平铺类和层级类间的互转...
  3. python idle运行anaconda_在Python IDLE 下调用anaconda中的库教程
  4. 为什么有些softmax公式需要减去输入中的最大值
  5. python---aiohttp库
  6. python可迭代对象,迭代器,生成器
  7. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 4丨员工薪水中位数【难度困难】
  8. Java消息服务~自动分配的消息头
  9. android系统签名app自动更新,【Android 进阶】Apk 使用系统签名
  10. loadrunner 录制java_LoadRunner脚本录制流程