MySQL视图的概念、创建、查看、删除和修改详解

目录
  • 一、什么是视图
  • 二、创建视图
    • 1.在单表上创建视图
    • 2.在多表上创建视图
  • 三、查看视图
  • 四、更新视图数据
  • 五、修改视图
  • 六、删除视图
  • 总结

一、什么是视图

小学的时候,每年都会举办一次抽考活动,意思是从每一个班级里面筛选出几个优秀的同学去参加考试。这时候很多班级筛选出来的这些同学就可以临时组成一个班级,如果我们把每一个班级都当做是一张真实的表,这个临时的班级在数据库里就可以当做一个视图,也就是说,这个临时的班级其实不是真实存在的,当考试过后,这些学生还是各回各家各找各妈。。。。

视图是从一个或多个表中导出来的表,是一种虚拟存在的表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据,这样用户可以不看整个数据库表中的数据,而只关心对自己有用的数据。视图可以使用户的操作更方便,而且可以保障数据库系统的安全性。

二、创建视图

1.在单表上创建视图

虽然视图可以被看成是一种虚拟表,但是其物理上是不存在的,即MySQL并没有专门的位置为视图存储数据。根据视图的概念可以发现其数据来源于查询语句,因此创建视图的基本语法为:

 CREATE[OR REPLACE] VIEW viewname[(columnlist)]
    AS SELECT statement  

CREATE表示创建新的视图;REPLACE表示替换已经创建的视图;[(columnlist)]表示可以显示的指出视图中有哪些列(必须和select语句对应);viewname为视图的名称;columnlist为属性列;SELECT statement表示SELECT语句;

注意! 创建视图需要登陆用户有相应的权限,查看权限方法:

select user,Select_priv,Create_view_priv from mysql.user;

例如在下面学生表上面创建视图

创建视图SQL语句示例

create view view_student
    as select id,name ,class_id,sex from student;

查看视图

通过视图可以检索数据

视图本身相当于一个窗口,通过这个窗口我们也可以修改数据

update view_student set name='小王王' where name='小王';

2.在多表上创建视图

CREATE[OR REPLACE] VIEW viewname[columnlist]
    AS SELECT statement 
  • CREATE表示创建新的视图;
  • REPLACE表示替换已经创建的视图;
  • viewname为视图的名称;
  • columnlist为属性列;
  • SELECT statement表示SELECT语句。与单表上创建视图不同的是,SELECT子句是涉及到多表的联合查询语句。

例如在下面教师表和学生表之间创建视图

SQL语句 (视图不允许有列名重复,所以这里的class.id和student.id要起别名

create view view_student_teacher
    as select class.id as teacher_id,teacher,class,student.id,student.name,sex
    from class
        left join student on class.id=student.class_id;

三、查看视图

创建完视图后,像表一样,我们经常需要查看视图信息。在MySQL中,有许多可以实现查看视图的语句,如DESCRIBE、SHOW TABLES、SHOW CREATE VIEW。如果要使用这些语句,首先要确保拥有SHOW VIEW的权限。

1.使用DESCRIBE | DESC语句查看视图基本信息

视图也是一张表,只是这张表比较特殊,是一张虚拟的表,所以同样可以使用DESCRIBE语句来查看视图的基本定义。DESCRIBE语句查看视图的语法如下:

DESCRIBE | DESC viewname;

例如查看上面创建的视图

2.使用SHOW TABLES语句查看视图基本信息

从MySQL 5.1版本开始,执行SHOW TABLES语句时不仅会显示表的名字,同时也会显示视图的名字。

show tables

3.使用 show create view/table 语句查看视图创建信息

SHOW CREATE TABLE|VIEW viewname;

四、更新视图数据

更新视图是指通过视图来插入(INSERT)、更新(UPDATE)和删除(DELETE)表中的数据。因为视图实质是一个虚拟表,其中没有数据,通过视图更新时都是转换到基本表更新。更新视图时,只能更新权限范围内的数据,超出范围就不能更新了。

update view_student set name='小王' where name='小王王';

不能更新的情况:

  • 视图中包含SUM()、COUNT()、MAX()和MIN()等函数;
  • 视图中包含UNION、UNION ALL、DISTINCT、GROUP BY和HAVING等关键字;
  • 视图对应的表存在没有默认值的列,而且该列没有包含在视图里;
  • 包含子查询的视图;
  • 其他特殊情况;

例如更改view_student_teacher时

五、修改视图

修改视图是指修改数据库中存在的视图,当基本表的某些字段发生变化的时候,可以通过修改视图来保持与基本表的一致性。ALTER语句来修改视图。

ALTER VIEW viewname[columnlist]
AS SELECT statement

这个语法中的所有关键字和参数除了alter 外,其他都和创建视图是一样的。

例如修改视图view_student_teacher

SQL语句示例

alter view view_student_teacher
as select teacher,class,name,sex
    from class
        left join student on class.id=student.class_id;

注意,当真实表中修改了某个存在视图中的字段时,这个视图也需要跟着变,否则会变成无效的视图

例如,修改了student表中的name字段

alter table student change column name name1 varchar(64);
select * from view_student_teaccher;

这时候就需要将视图也跟着修改

alter view view_student_teacher as select teacher,class,name1,sex
    from class
        left join student on class.id=student.class_id;

六、删除视图

删除视图是指删除数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据。

在MySQL中,可使用DROP VIEW语句来删除视图,但是用户必须拥有DROP权限。删除视图的语法如下:

DROP VIEW viewname [,viewnamen];

参数viewname表示所要删除视图的名称,可同时指定删除多个视图。

总结

到此这篇关于MySQL视图的概念、创建、查看、删除和修改的文章就介绍到这了,更多相关MySQL视图创建 查看 删除和修改内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL在多表上创建视图方法

    MySQL中,在两个或者以上的基本表上创建视图 在student表和stu_info表上,创建stu_class视图,查询出s_id号.姓名和班级 首先,创建stu_info表,并向表中插入数据 查看表中的数据 创建stu_class视图 查看视图 可以看出,创建的视图包含id.name和class字段 其中,id字段对应student表中的s_id字段,name字段对应student表中的name字段,class字段对应stu_info表中的class字段

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

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

  • mysql视图之创建可更新视图的方法详解

    本文实例讲述了mysql视图之创建可更新视图的方法.分享给大家供大家参考,具体如下: 我们知道,在mysql中,视图不仅是可查询的,而且是可更新的.这意味着我们可以使用insert或update语句通过可更新视图插入或更新基表的行. 另外,我们还可以使用delete语句通过视图删除底层表的行.但是,要创建可更新视图,定义视图的select语句不能包含以下任何元素: 聚合函数,如:min,max,sum,avg,count等. DISTINCT子句 GROUP BY子句 HAVING子句 左连接或

  • MySQL 视图的基础操作(五)

    1.为什么使用视图:      为了提高复杂SQL语句的复用性和表操作的安全性(例如:工资字段不想展示给所有能查看该查询结果的人),MySQL提供了视图特性.所谓视图,本质上是一种虚拟表,其内容与真实的表相似,包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储数据值的形式存在.行和列的数据来自定义视图的查询所引用基本表,并且在具体使用视图时动态生成.  视图有如下特点;       1. 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系.       2. 视图是由基本表

  • MySQL如何创建视图

    基本语法 可以使用 CREATE VIEW 语句来创建视图. 语法格式如下: CREATE VIEW <视图名> AS <SELECT语句> 语法说明如下. <视图名>:指定视图的名称.该名称在数据库中必须是唯一的,不能与其他表或视图同名. <SELECT语句>:指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图. 对于创建视图中的 SELECT 语句的指定存在以下限制: 用户除了拥有 CREATE VIEW 权限外,还具有操作中涉及的基础表和

  • mysql视图之创建视图(CREATE VIEW)和使用限制实例详解

    本文实例讲述了mysql视图之创建视图(CREATE VIEW)和使用限制.分享给大家供大家参考,具体如下: mysql5.x 版本之后支持数据库视图,在mysql中,视图的几乎特征符合SQL:2003标准. mysql以两种方式处理对视图的查询: 第一种方式,MySQL会根据视图定义语句创建一个临时表,并在此临时表上执行传入查询. 第二种方式,MySQL将传入查询与查询定义为一个查询并执行组合查询. mysql支持版本系统的视图,当每次视图被更改或替换时,视图的副本将在驻留在特定数据库文件夹的

  • mysql三张表连接建立视图

    三张表连接·· A表的a字段 对应 B表的b字段 ,B表的b1字段对应C 表的c字段 现在 建立 一个视图,可以同时 看到三张表的 所有信息·~ create or replace view v_name as select t1.*,t2.*,t3.* from A表 t1, B表 t2, C表 t3 where t1.a=t2.b and t2.b1=t3.c 两表链接创建视图 CREATE TABLE `aa_user` ( `id` int(10) NOT NULL, `name` va

  • MySQL视图的概念、创建、查看、删除和修改详解

    目录 一.什么是视图 二.创建视图 1.在单表上创建视图 2.在多表上创建视图 三.查看视图 四.更新视图数据 五.修改视图 六.删除视图 总结 一.什么是视图 小学的时候,每年都会举办一次抽考活动,意思是从每一个班级里面筛选出几个优秀的同学去参加考试.这时候很多班级筛选出来的这些同学就可以临时组成一个班级,如果我们把每一个班级都当做是一张真实的表,这个临时的班级在数据库里就可以当做一个视图,也就是说,这个临时的班级其实不是真实存在的,当考试过后,这些学生还是各回各家各找各妈.... 视图是从一

  • MySQL学习笔记之创建、删除、修改表的方法

    本文实例讲述了MySQL学习笔记之创建.删除.修改表的方法.分享给大家供大家参考,具体如下: 创建表: create table users( id int, name varchar(64), sex bit(1), birthday date, Entry_date date, job varchar(32), salary float, resume text ); 1 添加列: alter table 表名 add 列名 数据类型 alter table users add image

  • Golang实现文件夹的创建与删除的方法详解

    目录 创建文件夹 删除文件和文件夹 小结 学习笔记,写到哪是哪. 接着上一篇对纯文本文件读写操作,主要去实现一些文件夹操作. 创建文件夹 创建文件夹的时候往往要先判断文件夹是否存在. 样例代码如下 package main import ( "bufio" "fmt" "io" "os" ) //判断文件夹是否存在 func HasDir(path string) (bool, error) { _, _err := os.S

  • python3.6连接MySQL和表的创建与删除实例代码

    python3.6不支持importMySQLdb改用为importpymysql模块,需要自行安装模块pymysql. 1:python3.6安装模块pymysql 命令行安装pipinstallpymysql 2:python3.6连接mysql数据库 #!/bin/env Python # -*- coding:utf-8 -*- import pymysql conn = pymysql.connect( user="root", password="root@123

  • 浅谈MySQL中授权(grant)和撤销授权(revoke)用法详解

    MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利 grant select on testdb.* to common_user@'%' grant insert on testdb.* to common_user@'%' grant update on testdb.* to common_user@'%' grant delete on testdb.* to c

  • MySQL数据库存储引擎介绍及数据库的操作详解

    目录 MySQL存储引擎 InnoDB存储引擎 MyISAM储存引擎 Memory存储引擎 Archive存储引擎 数据库的相关操作 创建数据库 修改数据库 删除数据库 查看数据库列表 打开数据库 MySQL存储引擎 InnoDB存储引擎 InnoDB存储引擎是MySQL常见的的存储引擎, 它给MySQL的表提供了事务处理.回滚.崩溃修复和多版本并发控制等功能: 支持列值自动增长(列值不能为空且必须唯一): 支持外键. 缺点: 占用的空间相对较大 MyISAM储存引擎 MyISAM储存引擎支持3

  • Mysql迁移到TiDB双写数据库兜底方案详解

    目录 正文 兼容策略 三种方案比较 Django双写mysql与tidb策略 正文 TiDB 作为开源 NewSQL 数据库的典型代表之一,同样支持 SQL,支持事务 ACID 特性.在通讯协议上,TiDB 选择与 MySQL 完全兼容,并尽可能兼容 MySQL 的语法.因此,基于 MySQL 数据库开发的系统,大多数可以平滑迁移至 TiDB,而几乎不用修改代码.对用户来说,迁移成本极低,过渡自然. 然而,仍有一些 MySQL 的特性和行为,TiDB 目前暂时不支持或表现与 MySQL 有差异.

  • MySQL数据库设计之利用Python操作Schema方法详解

    弓在箭要射出之前,低声对箭说道,"你的自由是我的".Schema如箭,弓似Python,选择Python,是Schema最大的自由.而自由应是一个能使自己变得更好的机会. Schema是什么? 不管我们做什么应用,只要和用户输入打交道,就有一个原则--永远不要相信用户的输入数据.意味着我们要对用户输入进行严格的验证,web开发时一般输入数据都以JSON形式发送到后端API,API要对输入数据做验证.一般我都是加很多判断,各种if,导致代码很丑陋,能不能有一种方式比较优雅的验证用户数据呢

  • Git 创建分支提交远程分支详解

    Git 创建分支提交远程分支详解 1.创建本地分支 git branch 分支名,例如:git branch 2.0.1.20120806 注:2.0.1.20120806是分支名称,可以随便定义. 2.切换本地分支 git checkout 分支名,例如从master切换到分支:git checkout 2.0.1.20120806 3.远程分支就是本地分支push到服务器上.比如master就是一个最典型的远程分支(默认). git push origin 2.0.1.20120806 4.

  • mysql 5.7.17的最新安装教程图文详解

    mysql-5.7.17-winx64是现在最新版本的Mysql,这是免安装的,所以要进行些配置 下载地址:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.17-winx64.zip 1:下载安装包,将其解压到一个文件夹下 2:复制my-default.ini,并重命名为my.ini,然后用记事本打开输入mysql的基本配置: [mysql] ; 设置mysql客户端默认字符集 default-character-set=utf8 [my

随机推荐