MySQL操作之视图
  TEZNKK3IfmPf 2023年11月14日 33 0

一、概念

视图是从一个表或者多个表导出来的表,它是一种虚拟存在的表,并且表的结构和数据都依赖于基本表。通过视图不仅可以看到存放在基本表中的数据,并且还可以像操作基本表一样,对视图中的数据进行查询、修改和删除。

视图的优点:

  • 简化查询语句

视图不仅可以简化用户对数据的理解,还可以简化对数据的操作。

日常可以将经常使用的查询定义为视图,从而使用户避免大量重复的操作。

  • 安全性

通过视图用户只能查询和修改他们所能见到的数据,数据库中的其它数据既看不到也取不到。

  • 逻辑数据独立性

视图可以帮助用户屏蔽真实表结构变化带来的影响。

二、视图管理

2.1、创建视图语法格式

视图的创建基于SELECT语句和已经存在的数据表。视图可以建立在一张表上,也可以是多张表上。

CREATE [OR REPLACE][ALGORITHM = {
    
      UNDEFINED | MERGE | TEMPTABLE }]
	VIEW view_table_name [column_list]
	AS select_statement
	[WITH [CASCADED | LOCAL] CHECK OPTION]
  • CREATE:表示创建视图的关键字。

  • OR REPLACE:表示该语句能够替换已有视图。

  • ALGORITHM:可选。表示视图选择的算法。

    1. UNDEFINED:表示MySQL将字段选择所要使用的算法。

    2. MERGE:表示将使用视图的语句与视图定义合并起来,使视图定义的某一部分取代语句的对应部分。

    3. TEMPTABLE:将视图的结果存入临时表,然后使用临时表执行语句。

  • view_name:表示要创建的视图名称。

  • column_list:可选,表示属性清单。指定了视图中各个属性的名。默认情况下:与SELECT语句中查询的属性相同。

  • AS:表示指定视图要执行的操作。

  • select_statement:是一个完整的查询语句,表示从某个表或者视图中查出某些满足条件的数据,将这些数据存入视图中。

  • WITH CHECK OPTION:可选。表示创建视图时要保证在该视图的权限范围内。

    1. CASCADED:可选。表示创建视图时,要满足跟该视图有关的所有相关视图和表的条件。(该参数为默认值)
    2. LOCAL:可选。表示创建视图时,只要满足该视图本身定义的条件既可。

2.2 创建视图

使用源表列名

CREATE VIEW view_stu 
	AS SELECT math,chinese,math + chinese FROM student;

结果:

math chinese math+chinese
80 78 158

指定视图字段名称

CREATE VIEW view_stu2(math,chin,sum)
	AS SELECT math,chinese,math + chinese FROM student;

结果:

math chin sum
80 78 158

多表创建视图

CREATE VIEW stu_class(id,name,glass)
	AS 
	SELECT student.id, student.name, stu_info.class 
		FROM student, stu_info 
		WHERE student.id = stu_info.id;

2.3 查看视图

有三种方式查看创建的视图:

  • 使用DESCRIBE
  • 使用SHOW TABLE STATUS
  • 使用SHOW CREATE VIEW

1. 使用DESCRIBE

DESCRIBE 视图名;
DESC 视图名;

语句

DESCRIBE stu_class;

MySQL操作之视图

2. 使用SHOW TABLE STATUS

SHOW TABLE STATUS '视图名';
SHOW TABLE STATUS 'stu_class';

视图中多列值为null。(存储引擎,数据长度)

基本表:

MySQL操作之视图

视图表:

MySQL操作之视图

3. 使用SHOW CREATE VIEW

SHOW CREATE VIEW 视图名;
SHOW CREATE VIEW my_student;

MySQL操作之视图

2.4 修改视图

修改数据库中存在的视图的定义。当基本表中的某些字段发生改变时,修改视图保持视图与基本表的一致性。

  • 使用CREATE OR REPLACE VIEW
  • 使用ALTER

1. 使用CREATE OR REPLACE VIEW

CREATE OR REPLACE VIEW view_stu AS SELECT * FROM student;
  • view_stu:表示要修改的视图的名称。
  • *:通配符表示表中更新表中所有的字段。
  • student:表示基本表的表名。

2. 使用ALTER

ALTER VIEW view_stu SELECT chinese FROM student;
  • view_stu:表示要修改的视图的名称。
  • chinese:表示基本表中chinese,要更新的字段名。
  • student:表示基本表的表名。

2.5 更新视图

  • 更新视图是指通过视图来更新、插入、删除基本表中的数据。
  • 当更新视图或者基本表,对应的视图、基本表都会更新。除了4. 特殊情况不更新视图中一些不能在视图中更新内容。

1. 更新视图中字段值:

UPDATE view_stu SET chinese = 100;

结果:

  • 视图中的,基本表student、与student关联的视图表,chinese 字段都更新。

MySQL操作之视图

2. 使用INSERT 更新视图:

向基本表中插入数据

INSERT INTO student VALUES( 4, 'lisi', 100, 100 );

MySQL操作之视图

3. 使用DELECT 更新视图:

  • 删除数据是通过基本表进行删除的。
DELETE FROM view_stu2 WHERE math = 70;

4. 特殊情况不更新视图

  • 视图中包含基本表中定义为非空的列。
  • 在定义视图的SELECT语句后的字段列表中使用了数学表达式。
  • 在定义视图的SELECT语句后的字段列表中使用了聚合函数。
  • 在定义视图的SELECT语句后的字段列表中使用了DISTINCTUNIONTOPGROUP BYHAVING语句。

2.6 删除视图

语法:

DROP VIEW[IF EXISTS]
	view_naem [,view_name1]...
	[RESTRICT|CASCADE]

删除视图view_stu2

DROP VIEW IF EXISTS view_stu2;
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   30天前   24   0   0 mysql
TEZNKK3IfmPf