MySQL视图介绍与实验练习

文章目录

  • 1. MySQL 中的视图(View)简介
    • 1.1 视图的基本概念:
    • 1.2 创建视图:
    • 1.3 查看视图:
    • 1.4 更新视图:
    • 1.5 删除视图:
    • 1.6 视图的嵌套:
    • 1.7 权限管理:
    • 1.8 检查视图信息:
  • 2 关系型数据库视图和数据仓库中子图(Subset)的区别:
    • 2.1 关系型数据库视图:
    • 2.2 数据仓库中的子图:
  • 3 MySQL视图实验
    • 3.1 数据准备
      • 3.1.1 开发环境
      • 3.1.2 创建数据库
      • 3.1.3 创建goods表
      • 3.1.4 插入goods表
      • 3.1.5 创建category表
      • 3.1.6 插入category表
    • 3.2 创建视图
    • 3.3 修改视图列
    • 3.4 查看视图相关状态
    • 3.5 另一种创建视图的方式
    • 3.6 向视图源表插入数据
    • 3.7 通过视图更新数据
    • 3.8 删除视图中数据
    • 3.9 创建复杂筛选的视图

1. MySQL 中的视图(View)简介

1.1 视图的基本概念:

视图是一种虚拟表,其内容由一个查询定义。它提供了一种将复杂查询逻辑封装成可重用的结构的方式。

1.2 创建视图:

使用 CREATE VIEW 语句可以创建视图。例如:

CREATE VIEW my_view AS
SELECT column1, column2
FROM my_table
WHERE condition;

1.3 查看视图:

使用 SELECT 语句可以查询视图。例如:

SELECT * FROM my_view;

1.4 更新视图:

视图可以被更新,但有一些限制。一般来说,只有满足特定条件的视图才能被更新,例如视图中没有使用 GROUP BYDISTINCT

1.5 删除视图:

使用 DROP VIEW 语句可以删除视图。例如:

DROP VIEW my_view;

1.6 视图的嵌套:

视图可以嵌套,即在一个视图中引用另一个视图。

1.7 权限管理:

视图的访问权限和表一样,可以通过 GRANTREVOKE 语句进行管理。

1.8 检查视图信息:

可以通过 SHOW CREATE VIEW 或查询 information_schema 数据库中的相关表,如 VIEWS 表,来查看视图的定义和信息。

2 关系型数据库视图和数据仓库中子图(Subset)的区别:

2.1 关系型数据库视图:

  1. 定义: 视图是一个虚拟表,其内容是基于一个或多个基本表的查询结果。视图不存储实际的数据,而是根据定义的查询动态生成结果。

  2. 用途: 视图通常用于简化复杂查询、提供安全性、隐藏底层表结构、以及在应用程序中重用查询逻辑。

  3. 实时性: 视图是实时的,即每次查询都基于底层表的当前状态生成结果。因此,当基础表的数据发生变化时,视图的结果也会随之变化。

  4. 存储: 视图不存储实际数据,它只存储查询定义。数据实际上仍存储在底层的表中。

2.2 数据仓库中的子图:

  1. 定义: 在数据仓库中,子图通常指的是一个包含了数据仓库中部分数据的子集。这个子集可能是根据某些特定条件(例如,特定时间范围、特定业务区域等)而选择的。

  2. 用途: 子图用于分割大型数据仓库的数据,以便更快地进行查询和分析。它可以是一个按照某个维度划分的区域,也可以是一个按照时间划分的时间段。

  3. 历史数据: 数据仓库中的子图可能包含历史数据的快照,允许分析历史趋势和模式。

  4. 聚合: 子图中的数据可能是经过预先计算或聚合的,以支持更快速的查询和报告生成。

  5. 周期性更新: 数据仓库中的子图可能不是实时更新的,而是按照某个周期进行更新,以保持高性能查询的同时降低数据仓库的负载。


关系型数据库视图主要用于查询和简化数据库的使用,而数据仓库中的子图则更侧重于优化数据仓库的性能,支持复杂的分析和报告需求。两者在设计和使用上有不同的考虑因素,根据具体业务需求和数据特点选择合适的技术。

3 MySQL视图实验

3.1 数据准备

3.1.1 开发环境

MySQL 8.1
Windows 11

3.1.2 创建数据库

DROP DATABASE IF EXISTS shop;
CREATE DATABASE shop;
USE shop;

3.1.3 创建goods表

CREATE TABLE goods (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '商品id',category_id INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '分类id',name VARCHAR(120) NOT NULL DEFAULT '' COMMENT '名称',keyword VARCHAR(255) NOT NULL DEFAULT '' COMMENT '关键词',content TEXT NOT NULL COMMENT '详情',price DECIMAL(10, 2) UNSIGNED NOT NULL DEFAULT 0 COMMENT '价格',stock INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '库存',score DECIMAL(3, 2) UNSIGNED NOT NULL DEFAULT 0 COMMENT '评分',comment_count INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '评论计数'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.1.4 插入goods表

INSERT INTO goods (id, category_id, name, keyword, content,price,stock, score, comment_count) VALUES
(1, 3, '2B铅笔', '文具', '考试专用', 0.5, 500, 4.9, 40000),
(2, 3, '钢笔', '文具', '练字必不可少', 15, 300, 3.9, 500),
(3, 3, '碳素笔', '文具', '平时使用', 1, 500, 5, 98000),
(4, 12, '超薄笔记本', '电子产品', '轻小便携', 5999, 0, 2.5, 200),
(5, 6, '智能手机', '电子产品', '人人必备', 1999, 0, 5, 98000),
(6, 8, '桌面音箱', '电子产品', '扩音装备', 69, 750, 4.5, 1000),
(7, 9, '头戴耳机', '电子产品', '独享个人世界', 109, 0, 3.9, 500),
(8, 10, '办公电脑', '电子产品', '适合办公', 2000, 0, 4.8, 6000),
(9, 15, '收腰风衣', '服装', '春节潮流单品', 299, 0, 4.9, 40000),
(10, 16, '薄毛衣', '服装', '居家旅行必备', 48, 0, 4.8, 98000);

3.1.5 创建category表

CREATE TABLE category (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '分类id',parent_id INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '上级分类id',name VARCHAR(100) NOT NULL DEFAULT '' COMMENT '名称',sort INT NOT NULL DEFAULT 0 COMMENT '排序',is_show TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否显示',create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',update_time DATETIME DEFAULT NULL COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.1.6 插入category表

INSERT INTO category (id, parent_id, name) VALUES
(1, 0, '办公'), (2, 1, '耗材'), (3, 2, '文具'),
(4, 0, '电子产品'), (5, 4, '通讯'), (6, 5, '手机'),
(7, 4, '影音'), (8, 7, '音箱'), (9, 7, '耳机'),
(10, 4, '电脑'), (11, 10, '台式电脑'), (12, 10, '笔记本'),
(13, 0, '服装'), (14, 13, '女装'), (15, 14, '风衣'), (16, 14, '毛衣');

3.2 创建视图

create view gc_views as 
select goods.id, goods.name,category.name as category_name
from goods
join category on goods.category_id = category.id;

3.3 修改视图列

ALTER VIEW gc_views AS
SELECT id, name
FROM goods;

3.4 查看视图相关状态

select * from gc_views;desc gc_viewsshow create table gc_views

3.5 另一种创建视图的方式

CREATE OR REPLACE VIEW gc_views AS
SELECT goods.id, goods.name FROM goods;

3.6 向视图源表插入数据


INSERT INTO goods (id,name)VALUES (11, '图书');INSERT INTO goods (id, name, content)
VALUES (11, '图书', 'hahaha');

3.7 通过视图更新数据

UPDATE gc_views
SET name = '家电'
WHERE id = 11;

3.8 删除视图中数据

DELETE FROM gc_views
WHERE id = 11;

3.9 创建复杂筛选的视图

CREATE VIEW v1 AS
SELECT id, name
FROM category
WHERE id < 30;CREATE VIEW v2 AS
SELECT id, name
FROM v1
WHERE id > 20;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/207818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vuepress-----15、md用法进阶

vuepress markdown说明文档 https://www.vuepress.cn/guide/markdown.html # 示例&#xff1a;封装countUp.js为Vue组件 https://github.com/inorganik/countUp.js https://inorganik.github.io/countUp.js/ # 安装 yarn add countup.js# 创建vue文件 全局Vue组件存放位置…

web项目服务器后台运行

阿里官方方法 在Linux系统的ECS实例内,当断开SSH客户端后,如何保持进程继续运行的解决方案_云服务器 ECS-阿里云帮助中心 (aliyun.com)

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之文件管理(1)》(22)

《Linux操作系统原理分析之文件管理&#xff08;1&#xff09;》&#xff08;22&#xff09; 7 文件管理7.1 文件与文件系统7.1.1 文件7.1.3 文件系统及其功能 7.2 文件的组织结构7.2.1 文件的逻辑结构7.2.2 文件的物理结构一、顺序结构&#xff08;顺序文件或连续文件&#xf…

Java来实现二叉树算法,将一个二叉树左右倒置(左右孩子节点互换)

文章目录 二叉树算法二叉树左右变换数据 今天来和大家谈谈常用的二叉树算法 二叉树算法 二叉树左右变换数据 举个例子&#xff1a; Java来实现二叉树算法&#xff0c;将一个二叉树左右倒置&#xff08;左右孩子节点互换&#xff09;如下图所示 实现的代码如下&#xff1a;以…

ECharts的颜色渐变

目录 一、直接配置参数实现颜色渐变 二、使用ECharts自带的方法实现颜色渐变 一、两种渐变的实现方法 1、直接配置参数实现颜色渐变 横向的渐变&#xff1a; //主要代码 option {xAxis: {type: category,boundaryGap: false,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yA…

云上巴蜀丨云轴科技ZStack成功实践精选(川渝)

巴蜀——古政权必争之地 不仅拥有优越的战略位置 而且拥有丰富的自然资源&#xff0c;悠久的历史文化 如今的川渝经济、人口发展迅速 2023年前三季度&#xff0c;四川与重庆GDP增速均超过国家平均线&#xff0c;为6.5%为5.6% 川渝经济发展带动数字化发展浪潮 云轴科技ZSt…

打造专属小程序,乔拓云模板平台助力商家抢占先机

打造专属小程序&#xff0c;乔拓云模板平台助力商家抢占先机&#xff01;该平台涵盖全行业小程序模板&#xff0c;一键复制即可上线。 想要快速创建高效实用的小程序&#xff0c;乔拓云小程序模板开发平台为您提供了解决方案&#xff01;我们为您提供一系列精心设计的小程序模板…

LeetCode Hot100 131.分割回文串

题目&#xff1a; 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 方法&#xff1a;灵神-子集型回溯 假设每对相邻字符之间有个逗号&#xff0c;那么就看…

[c++]—string类___深度学习string标准库成员函数与非成员函数(string的增删查改函数)

沉淀,沉淀,再沉淀. &#x1f469;&#x1f3fb;‍&#x1f4bb;作者:chlorine &#x1f449;上一篇&#xff1a;string标准库成员函数和非成员函数(上) 目录 &#x1f36d;构造和析构的实现 &#x1f36d; string→c类型的字符串数组 &#x1f36d;operator[]类对象元素的访…

c语言-动态内存管理

文章目录 一、为什么会有动态内存管理二、申请内存函数1、malloc2、free3、calloc4、realloc 三、常见的动态内存的错误四、练习 一、为什么会有动态内存管理 1.我们一般的开辟空间方式&#xff1a; int a 0;//申请4个字节空间 int arr[10] { 0 };//申请40个字节空间2.这样…

解决在Linux中进行redis的主从复制时出现的从机可以获取到主机的信息,主机获取不到从机的信息~

主机&#xff1a; 从机1&#xff1a; 从机2&#xff1a; 出现上述的原因是我在redis.conf中设置了密码&#xff0c;那么就导致了我在进行主从复制时&#xff0c;需要进行密码验证&#xff0c;然后我在网上查阅了很多资料&#xff0c;有的说让在从机中指定密码&#xff0c;有的说…

一对多聊天室

多人聊天包 由于要先创建服务面板&#xff0c;接收客户端连接的信息&#xff0c;此代码使用顺序为先启动服务端&#xff0c;在启动客户端&#xff0c;服务端不用关&#xff0c;不然会报错。多运行几次客户端&#xff0c;实现单人聊天 创建服务面板 package yiduiduo;import j…

【头歌系统数据库实验】实验7 SQL的复杂多表查询-1

目录 第1关&#xff1a;求各颜色零件的平均重量 第2关&#xff1a;求北京和天津供应商的总个数 第3关&#xff1a;求各供应商供应的零件总数 第4关&#xff1a;求各供应商供应给各工程的零件总数 第5关&#xff1a;求重量大于所有零件平均重量的零件名称 第6关&#xff1…

初识人工智能,一文读懂人工智能概论(1)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

Python Django-allauth: 构建全面的用户身份验证系统

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Django-allauth是一个功能强大的Django插件&#xff0c;旨在简化和定制Web应用程序中的用户身份验证和管理。本文将深入介绍Django-allauth的核心功能、基本用法以及实际应用场景&#xff0c;通过丰富的示例代码…

AWTK 串口屏开发(1) - Hello World

1. 功能 这个例子很简单&#xff0c;制作一个调节温度的界面。在这里例子中&#xff0c;模型&#xff08;也就是数据&#xff09;里只有一个温度变量&#xff1a; 变量名数据类型功能说明温度整数温度。范围 (0-100) 摄氏度 2. 创建项目 从模板创建项目&#xff0c;将 hmi/…

挑选在线客服系统的七大注意事项

越来越多的企业开始注重客户服务&#xff0c;所以在线客服系统也逐渐成为了电商企业不可或缺的一部分。然而在挑选在线客服系统的过程中&#xff0c;蛮多企业会遇到各种各样的问题&#xff0c;这就导致了最终选择的系统并不适合自己企业的需求。接下来我将提醒大家挑选在线客服…

网络运维与网络安全 学习笔记2023.12.4

网络运维与网络安全 学习笔记 第三十四天 今日目标 访问存储设备、配置yum源、使用yum管理软件 LAMP部署及测试、systemctl系统控制、SELinux-Firewall防护 访问存储设备 挂载/卸载设备 什么是挂载? 挂载&#xff0c;装载 将光盘/U盘/分区/网络存储等设备装到某个Linux目…

mysql中IGNORE 关键字段用法

在MySQL中&#xff0c;IGNORE 关键字通常与数据修改语句&#xff08;如INSERT、UPDATE和DELETE&#xff09;一起使用&#xff0c;其作用是使得操作在遇到错误时不会终止执行&#xff0c;而是忽略错误并继续处理后续的数据。这对于处理可能包含重复键值或某些违反约束的批量操作…