首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据库MySQL-视图

数据库MySQL-视图

作者头像
cwl_java
发布于 2020-03-27 04:22:48
发布于 2020-03-27 04:22:48
1.6K00
代码可运行
举报
文章被收录于专栏:cwl_Javacwl_Java
运行总次数:0
代码可运行

1.4 视图

1.4.1 概述

1、视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上

2、视图中并不存放数据,而是存放在视图所引用的原始表(基表)中

3、同一张原始表,根据不同用户的不同需求,可以创建不同的视图

1.4.2 作用

1、筛选表中的行

2、防止未经许可的用户访问敏感数据

3、隐藏数据表的结构

4、降低数据表的复杂程度

1.4.3 创建视图

语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 创建视图
create view 视图名
as 
	select 语句;
	
-- 查询视图
select 列名 from 视图

例题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 创建视图
mysql> create view view1
    -> as
    -> select * from stu where ch>=60 and math>=60;
Query OK, 0 rows affected (0.00 sec)

-- 查询视图
mysql> select * from view1;
+--------+----------+--------+--------+---------+------------+------+------+
| stuNo  | stuName  | stuSex | stuAge | stuSeat | stuAddress | ch   | math |
+--------+----------+--------+--------+---------+------------+------+------+
| s25302 | 李文才        ||     31 |       3 | 上海          |   77 |   76 |
| s25318 | 争青小子        ||     26 |       6 | 天津           |   86 |   92 |
| s25319 | 梅超风        ||     23 |       5 | 河北          |   74 |   67 |
| s25320 | Tom      ||     24 |       8 | 北京           |   65 |   67 |
| s25321 | Tabm     ||     23 |       9 | 河北          |   88 |   77 |
+--------+----------+--------+--------+---------+------------+------+------+
5 rows in set (0.02 sec)

-- 视图可以使得降低SQL语句的复杂度
mysql> create view view2
    -> as
    -> select stuno,stusex,writtenexam,labexam from stuinfo natural join stumarks;
Query OK, 0 rows affected (0.01 sec)
1.4.4 修改视图

语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
alter view 视图名
as
	select 语句

例题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> alter view view2
    -> as
    -> select stuname from stuinfo;
Query OK, 0 rows affected (0.00 sec)
1.4.5 删除视图

语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
drop view [if exists ] 视图1,视图,...

例题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> drop view view2;
Query OK, 0 rows affected (0.00 sec)
1.4.6 查看视图信息
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 方法一;
mysql> show tables;	-- 显示所有的表和视图

-- 方法二:精确查找视图(视图信息存储在information_schema下的views表中)
mysql> select table_name from information_schema.views;
+------------+
| table_name |
+------------+
| view1      |
+------------+
1 row in set (0.05 sec)

-- 方法三:通过表的comment属性查询视图
mysql> show table status\G;		-- 查询所有表和视图的详细状态信息
mysql> show table status where comment='view'\G   -- 只查找视图信息

查询视图的结构

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> desc view1;

查询创建视图的语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> show create view view1\G
1.4.7 视图算法

场景:找出语文成绩最高的男生和女生

方法一:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select * from (select * from stu order by ch desc) t group by stusex;
+--------+----------+--------+--------+---------+------------+------+------+
| stuNo  | stuName  | stuSex | stuAge | stuSeat | stuAddress | ch   | math |
+--------+----------+--------+--------+---------+------------+------+------+
| s25321 | Tabm     ||     23 |       9 | 河北          |   88 |   77 |
| s25318 | 争青小子        ||     26 |       6 | 天津           |   86 |   92 |
+--------+----------+--------+--------+---------+------------+------+------+
2 rows in set (0.00 sec)

方法二:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> create view view3
    -> as
    -> select * from stu order by ch desc;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from view3 group by stusex;
+--------+---------+--------+--------+---------+------------+------+------+
| stuNo  | stuName | stuSex | stuAge | stuSeat | stuAddress | ch   | math |
+--------+---------+--------+--------+---------+------------+------+------+
| s25301 | 张秋丽        ||     18 |       1 | 北京           |   80 | NULL |
| s25303 | 李斯文       ||     22 |       2 | 北京           |   55 |   82 |
+--------+---------+--------+--------+---------+------------+------+------+
2 rows in set (0.00 sec)

结论:方法一和方法二的结果不一样,这是因为视图的算法造成的。

视图的算法有:

1、merge:合并算法(将视图语句和外层语句合并后再执行)

2、temptable:临时表算法(将视图作为一个临时表来执行)

3、undefined:未定义算法(用哪种算法有MySQL决定,这是默认算法,视图一般会选merge算法)

重新通过视图实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 创建视图,指定算法为临时表算法
mysql> create or replace algorithm=temptable view view3
    -> as
    -> select * from stu order by ch desc;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from view3 group by stusex;
+--------+----------+--------+--------+---------+------------+------+------+
| stuNo  | stuName  | stuSex | stuAge | stuSeat | stuAddress | ch   | math |
+--------+----------+--------+--------+---------+------------+------+------+
| s25321 | Tabm     ||     23 |       9 | 河北          |   88 |   77 |
| s25318 | 争青小子        ||     26 |       6 | 天津           |   86 |   92 |
+--------+----------+--------+--------+---------+------------+------+------+
2 rows in set (0.00 sec)

结论:和子查询结果一致。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数据库MySQL-union(联合)
2、 union两边的select语句的字段名可以不一致,最终按第一个select语句的字段名。
cwl_java
2020/03/27
8300
数据库MySQL-子查询
1.3 子查询 语法:select * from 表1 where (子查询) 外面的查询称为父查询 子查询为父查询提供查询条件 1.3.1 标量子查询 特点:子查询返回的值是一个 -- 查找笔试成绩是80的学生 mysql> select * from stuinfo where stuno=(select stuno from stumarks where writtenexam=80); +--------+---------+--------+--------+---------+-------
cwl_java
2020/03/27
3.9K0
数据库MySQL-预处理
1.8 预处理 每个代码的段的执行都要经历:词法分析——语法分析——编译——执行 预编译一次,可以多次执行。用来解决一条SQL语句频繁执行的问题。 预处理语句:prepare 预处理名字 from ‘sql语句’ 执行预处理:execute 预处理名字 [using 变量] 例题:不带参数的预处理 -- 创建预处理 mysql> prepare stmt from 'select * from stuinfo'; Query OK, 0 rows affected (0.06 sec) Statement
cwl_java
2020/03/28
1.3K0
数据库MySQL-查询语句
dual表是一个伪表。在有些特定情况下,没有具体的表的参与,但是为了保证select语句的完整又必须要一个表名,这时候就使用伪表。
cwl_java
2020/03/27
42.6K0
数据库MySQL-模糊查询
1.7 模糊查询 1.7.1 通配符 _ [下划线] 表示任意一个字符 % 表示任意字符 练习 1、满足“T_m”的有(A、C) A:Tom B:Toom C:Tam D:Tm E:Tmo 2、满足“T_m_”的有( B C) A:Tmom B:Tmmm C:T1m2 D:Tmm E:Tm 3、满足“张%”的是(ABCD) A:张三 B:张三丰 C:张牙舞爪 D:张 E:小张 4
cwl_java
2020/03/27
5.3K0
《MySQL核心知识》第11章:视图
今天是《MySQL核心知识》专栏的第11章,今天为大家系统的讲讲MySQL中的视图,希望通过本章节的学习,小伙伴们能够举一反三,彻底掌握MySQL中的视图知识。好了,开始今天的正题吧。
冰河
2022/12/01
4870
《MySQL核心知识》第11章:视图
数据库MySQL-函数
1.7 函数 1.7.1 数字类 -- 获取随机数 mysql> select rand(); +------------------+ | rand() | +------------------+ | 0.25443412666622 | +------------------+ 1 row in set (0.00 sec) -- 随机排序 mysql> select * from stuinfo order by rand(); -- 随机获取一条记录 mysql> se
cwl_java
2020/03/28
1.2K0
数据库MySQL-多表查询
1.2 多表查询 1.2.1 内连接 规则:返回两个表的公共记录 语法: -- 语法一 select * from 表1 inner join 表2 on 表1.公共字段=表2.公共字段 -- 语法二 select * from 表1,表2 where 表1.公共字段=表2.公共字段 例题 -- inner join mysql> select * from stuinfo inner join stumarks on stuinfo.stuno=stumarks.stuno; +--------+--
cwl_java
2020/03/27
10.8K0
MySQL数据库5事务、视图、触发器、函数、数据库的备份
事务指一组操作要么成功要么失败,在成功修改数据前原来的数据不会受影响,如果修改成功则数据将被更改,如果失败,则原数据库数据不变。
GH
2019/12/12
1.1K0
数据库-数据操作
语法:insert into 表名 (字段名, 字段名,…) values (值1, 值1,…)
cwl_java
2020/03/27
9950
Mysql介绍
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。 MySQL使用 C和 C++编写,并使用了多种编译器进行测试,保证了源代码的可移植性。 提供 TCP/IP、ODBC 和 JDBC等多种数据库连接途径。 MySQL 是开源的,所以不需要支付费用。 原生JSON支持(5.7 新增) 企业级的应用支持。
全栈程序员站长
2022/08/04
6560
Mysql介绍
MySQL高级篇之View视图讲解
  视图是一种虚拟表 ,本身是不具有数据 的,占用很少的内存空间,它是 SQL 中的一个重要概念.视图建立在已有表的基础上, 视图赖以建立的这些表称为基表.视图的创建和删除只影响视图本身,不影响对应的基表。但是当对视图中的数据进行增加、删除和修改操作时,数据表中的数据会相应地发生变化,反之亦然。视图,是向用户提供基表数据的另一种表现形式。通常情况下,小型项目的数据库可以不使用视图,但是在大型项目中,以及数据表比较复杂的情况下,视图的价值就凸显出来了,它可以帮助我们把经常查询的结果集放到虚拟表中,提升使用效率。理解和使用起来都非常方便。
用户4919348
2022/04/13
7690
MySQL高级篇之View视图讲解
数据库MySQL-列属性
字段值从1开始,每次递增1,自动增长的值就不会有重复,适合用来生成唯一的id。在MySQL中只要是自动增长列必须是主键
cwl_java
2020/03/27
3.6K0
学生信息管理系统(使用数据库)
2.新建操作类,因为这次要使用MySql数据库,所以要使用JDBC将Java与数据库链接起来。
李志伟
2019/12/17
3.2K0
基础SQL-DML语句-对数据库表数据增删改
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
Devops海洋的渔夫
2022/01/17
3040
mysql-视图
视图是虚拟表或逻辑表,它被定义为具有连接的SQL SELECT查询语句。因为数据库视图与数据库表类似,它由行和列组成,因此可以根据数据库表查询数据。其内容由查询定义。
py3study
2018/08/03
1K0
MySQL之视图
一张虚表,和真实的表一样。视图包含一系列带有名称的行和列数据。视图是从一个或多个表中导出来的,我们可以通过insert,update,delete来操作视图。当通过视图看到的数据被修改时,相应的原表的数据也会变化。同时原表发生变化,则这种变化也可以自动反映到视图中。
小手冰凉
2020/05/12
1.9K0
数据库-表的操作
**语法一:**create table 新表 select 字段 from 旧表
cwl_java
2020/03/27
7140
【MySQL】视图
喜欢做梦
2025/07/12
1420
MySQL-索引;视图「建议收藏」
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
全栈程序员站长
2022/09/16
1.5K0
MySQL-索引;视图「建议收藏」
相关推荐
数据库MySQL-union(联合)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验