前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL视图介绍与实验练习

MySQL视图介绍与实验练习

作者头像
火之高兴
发布2024-07-25 15:33:36
610
发布2024-07-25 15:33:36
举报
文章被收录于专栏:大数据应用技术

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

1.1 视图的基本概念:

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

1.2 创建视图:

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

代码语言:javascript
复制
CREATE VIEW my_view AS
SELECT column1, column2
FROM my_table
WHERE condition;

1.3 查看视图:

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

代码语言:javascript
复制
SELECT * FROM my_view;

1.4 更新视图:

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

1.5 删除视图:

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

代码语言:javascript
复制
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 创建数据库
代码语言:javascript
复制
DROP DATABASE IF EXISTS shop;
CREATE DATABASE shop;
USE shop;
3.1.3 创建goods表
代码语言:javascript
复制
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表
代码语言:javascript
复制
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表
代码语言:javascript
复制
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表
代码语言:javascript
复制
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 创建视图

代码语言:javascript
复制
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 修改视图列

代码语言:javascript
复制
ALTER VIEW gc_views AS
SELECT id, name
FROM goods;

3.4 查看视图相关状态

代码语言:javascript
复制
select * from gc_views;

desc gc_views

show create table gc_views

3.5 另一种创建视图的方式

代码语言:javascript
复制
CREATE OR REPLACE VIEW gc_views AS
SELECT goods.id, goods.name FROM goods;

3.6 向视图源表插入数据

代码语言:javascript
复制
INSERT INTO goods (id,name)VALUES (11, '图书');


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

3.7 通过视图更新数据

代码语言:javascript
复制
UPDATE gc_views
SET name = '家电'
WHERE id = 11;

3.8 删除视图中数据

代码语言:javascript
复制
DELETE FROM gc_views
WHERE id = 11;

3.9 创建复杂筛选的视图

代码语言:javascript
复制
CREATE VIEW v1 AS
SELECT id, name
FROM category
WHERE id < 30;


CREATE VIEW v2 AS
SELECT id, name
FROM v1
WHERE id > 20;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-08,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 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 创建复杂筛选的视图
                                      相关产品与服务
                                      云数据库 MySQL
                                      腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                                      领券
                                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档