百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

MySQL视图的基本操作

wptr33 2024-11-26 09:29 29 浏览

原文地址:https://dwz.cn/B5nmwY6Y

作者:best.lei

视图是数据库中的虚拟表。包含一系列带有名称的行和列数据。视图是从一个或者多个表中导出的,视图的行为与表非常相似,用户可以使用SELECT语句查询数据,以及使用INSERT、UPDATE和DELETE修改记录,视图使用户操作更加方便而且保障数据库系统的安全。

视图一旦定义便存储在数据库中,与其对应的数据并没有像表那样在数据库中再存储一份,通过视图看到的数据只是存放在基本表中的数据。对视图的操作与对表的操作一样,可以对其进行查询、修改和删除。当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化,同时若基本表的数据放生变化,则这种变化也会自动地反应到视图中。

  • 创建视图

创建视图的基本语法格式为:CREATE [OR REPLACE] [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}] VIEW view_name [(column_list)] AS SELECT_statement [WITH [CASCADED|LOCAL] CHECK OPTION] 其中CREATE用来创建新的视图,REPLACE表示替换已经创建的视图,ALGORITHM表示视图选择的算法,view_name为视图名称,column_list为属性列,SELECT_statement表示SELECT语句,WITH[CASCADED|LOCAL] CHECK OPTION参数表示视图在更新时保证在视图的权限范围内。

ALGORITHM的取值有3个,分别是UNDEFINED|MERGE|TEMPTABLE,UNDEFINED表示MySQL将自动选择算法,MERGE表示将使用的视图与视图定义合并起来,使得视图定义的某一部分取代语句对应的部分,TEMPTABLE表示将视图的结果存入临时表,然后用临时表来执行语句。

CASCADED与LOCAL为可选参数,CASCADED为默认参数,表示更新视图时要满足所有相关视图和表的条件,LOCAL表示更新视图时满足该视图本身定义的条件即可。

视图属于数据库。在默认情况下,将在当前数据库创建新视图。想要在给定数据库中明确创建视图,创建时应将名称指定为db_name.view_name.

如下图在单表上创建视图(CREATE VIEW view_student(sID,sName,sAddress) AS SELECT id,name,address FROM tb_student); 选择表tb_student的id,name和address列作为视图view_student的列。

若想创建包含学生id,name和班级的视图呢?语法格式为:CREATE VIEW view_s_class(sID,sName,sClass) AS SELECT tb_student.id,tb_student.name,tb_class.name FROM tb_student,tb_class WHERE tb_student.classID=tb_class.id;

  • 查看视图

查看视图有4种方式,包括:DESCRIBE、SHOW TABLE STATUS、SHOW CREATE VIEW以及在views表中查看视图详细信息。

  1. DESCRIBE语句查看视图基本信息,语法为:DESCRIBE view_name; 查看view_s_class视图如上上图所示。结果显示视图的字段定义、字段数据类型、是否为空、是否为主外键、默认值和额外信息。
  2. SHOW TABLE STATUS语句查看视图基本信息,语法为:SHOW TABLE STATUS LIKE 'view_name'; 如下图所示,查看view_s_class视图,结果显示,表的说明Comment的值为VIEW说明该表为视图,其他信息为NULL说明这是一个虚表。当查询学生表时,信息包含了存储引擎、创建时间等,Comment信息为空,这就是视图和表的区别。


  1. SHOW CREATE VIEW语句查看视图详细信息,语法为:SHOW CREATE VIEW 'view_name'; 该语句查看视图的详细定义,结果显示视图的名称、创建数据的语句等信息。
  1. 在视图表中查看详细信息,利用SELECT语句查询information_schema数据库下的views表中存储所有视图的定义。查询语句为:SELECT * FROM information_shcema.views;
  • 修改视图

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

  1. CREATE OR REPLACE VIEW语句修改视图,语法格式为:CREATE[OR REPLACE][ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}] VIEW view_name[(column_list)] AS SELECT_statement [WITH[CASCADED|LOCAL]CHECK OPTION] 与创建视图的语句完全一样。当视图存在时,修改视图定义;当视图不存在时,创建视图。通过CREATE OR REPLACE对view_student进行修改。
  1. ALTER语句修改视图,语法格式为:ALTER [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}] VIEW view_name[(column_list)] AS SELECT_statement [WITH[CASCADED|LOCAL]CHECK OPTION] 如下是通过ALTER语句将view_student视图改为原来的样子。
  • 更新视图

更新视图是指通过视图来插入、更新、删除表中的数据,因为视图是一个虚表,其中没有数据。通过视图更新的时候其实是对基本表的更新,本节将介绍视图更新的3种方法:INSERT、UPDATE和DELETE。

  1. INSERT语句向视图中插入数据,代码为:INSERT INTO view_student value(10,'赵云','Hebei');
  1. UPDATA语句更新视图中的数据,代码为:UPDATE view_student SET sAddress='Anhui' WHERE sID=8;
  1. DELETE删除视图中添加的赵云字段,代码为:DELETE FROM view_student WHERE sID=10;
  • 删除视图

删除一个或多个视图可以使用DROP VIEW语句,语法格式为:DROP VIEW [IF EXISTS] view_name[,view_name][RESTRICT|CASCADE] 其中,view_name是要删除的视图名称,可以添加多个视图,各个名称之间使用逗号分隔。如下是删除view_student视图。

  • MySQL中视图和表的区别和联系
  • 两者的区别

  1. 视图是编译好的SQL语句,是基于SQL语句的结果集的可视化的表;
  2. 视图没有实际的物理记录,而基本表有;
  3. 表是内容,视图是窗口;
  4. 表占用物理空间而视图不占用物理空间,视图只是逻辑概念的存在;
  5. 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以防止用户接触数据表。
  6. 表属于全局模式中的表,是实表;视图属于局部模式,是虚表;
  7. 视图的建立和删除只影响视图本身,但不影响对应的基本表。
  • 两者的联系
  1. 视图是在基本表之上建立的表,视图的结构和内容都来自基本表,依赖基本表存在而存在。一个视图可以对应一到多个基本表,是基本表的抽象和在逻辑意义上建立的新关系。

相关推荐

一篇文章带你了解PHP的学习使用(php的教程)

ThinkPHP5实战...

在memcached管理php的session(memcached libevent)

PHP的session(会话管理)一般是以文件形式进行,而在多个Web服务器之间进行session管理时memecached会比文件管理方式更加方便。在这里介绍如何使用memcached管理PHP的s...

php传值和传引用的区别(php 传值和传引用)

php传值:在函数范围内,改变变量值得大小,都不会影响到函数外边的变量值。PHP传引用:在函数范围内,对值的任何改变,在函数外部也有所体现,因为传引用传的是内存地址。传值:和copy是一样的。【打个比...

PHP 常量详解教程(php常量和变量)

常量类似变量,但是常量一旦被定义就无法更改或撤销定义。PHP常量常量是单个值的标识符(名称)。在脚本中无法改变该值。有效的常量名以字符或下划线开头(常量名称前面没有$符号)。注释:与变量不同,常...

php自学零基础入门小知识(php新手入门教程)

我们就把PHP入门当成一个苹果吧!一口一口的吃掉他!不啰嗦了!开始了1、嵌入方法:类似ASP的<%,PHP可以是<?php或者是<?,结束符号是?>,当然您也可以自己指定。2、...

PHP 语法详解(php语法大全)

PHP脚本在服务器上执行,然后向浏览器发送回纯HTML结果。基础PHP语法PHP脚本可放置于文档中的任何位置。PHP脚本以<?php开头,以?>结尾:<?php...

PHP笔记(一)PHP基础知识(php必背知识点)

创建PHP程序PHP代码框架<?php>2.文件命名规则...

PHP 8新特性之Attributes(注解),你掌握了吗?

PHP8的Alpha版本,过几天就要发布了,其中包含了不少的新特性,当然我自己认为最重要的还是JIT,这个我从2013年开始参与,中间挫折无数,失败无数后,终于要发布的东东。不过,今天呢,我不打算谈J...

PHP基本语法之标记与注释(php注释规范)

1、标记由于PHP是嵌入式脚本语言,它在实际开发中经常会与HTML内容混在一起,所以为了区分HTML与PHP代码,需要使用标记对PHP代码进行标识。如:<html>...

php注解(PHP注解 性能)

目标了解和使用php注解,如果你已经掌握其他一种具有注解的语言,例如:java、python等,你在本文中只需要了解点语法就行。示例php8以前的版本,注解写在注释里,如果你掌握其他语言的注解,你是不...

数据丢失?别慌!MySQL备份恢复攻略

想象一下,某个晴朗的午后,你正享受着咖啡,突然接到紧急电话:你的网站或APP彻底挂了!系统崩溃,界面全白。虽然心头一紧,但你或许还能安慰自己:系统崩溃只是暂停服务,数据还在,修复修复就好了。然而,如果...

MySQL 日志:undo log、redo log、binlog

今天来和大家分享MySQL的三个日志文件,可以说MySQL的多数特性都是围绕日志文件实现,而其中最重要的有以下三种:...

MySQL三大日志:binlog、redolog、undolog全解析

binlog概述在MySQL数据库中,binlog可是个相当重要的存在,它的全称为binarylog,也就是二进制日志。它就像是数据库的“记忆本”,记录了所有的DDL(数据定义语言)和...

1、MySQL数据库介绍(mysql数据库简单介绍)

1.1数据库的核心定义数据库的本质数据库乃存储数据对象之容器,涵盖如下关键组件:表(Table)...

MySQL 日志双雄:实时监控与历史归档实战优化

MySQL日志双雄:实时监控+历史归档实战用这招让你家日志系统再也不卡不爆炸MySQL十亿级日志处理:从洪峰到归档全攻略手把手教你用MySQL搞定ELK级日志监控在微服务架构大行其道的今天,日志系统早...