IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> TiDB 中的视图功能 -> 正文阅读

[大数据]TiDB 中的视图功能

本章将介绍 TiDB 中的视图功能。

概述

TiDB 支持视图,视图是一张虚拟表,该虚拟表的结构由创建视图时的?SELECT?语句定义。

  • 通过视图可以对用户只暴露安全的字段及数据,进而保证底层表的敏感字段及数据的安全。
  • 将频繁出现的复杂查询定义为视图,可以使复杂查询更加简单便捷。

创建视图

在 TiDB 当中,可以通过?CREATE VIEW?语句来将某个较为复杂的查询定义为视图,其语法如下:

 

CREATE VIEW view_name AS query;

请注意,创建的视图名称不能与已有的视图或表重名。

例如,在多表连接查询?章节当中,通过?JOIN?语句连接?books?表和?ratings?表查询到了带有平均评分的书籍列表。为了方便后续查询,可以将该查询语句定义为一个视图,SQL 语句如下所示:

 

CREATE VIEW book_with_ratings AS SELECT b.id AS book_id, ANY_VALUE(b.title) AS book_title, AVG(r.score) AS average_score FROM books b LEFT JOIN ratings r ON b.id = r.book_id GROUP BY b.id;

查询视图

视图创建完成后,便可以使用?SELECT?语句像查询一般数据表一样查询视图。

 

SELECT * FROM book_with_ratings LIMIT 10;

TiDB 在执行查询视图语句时,会将视图展开成创建视图时定义的?SELECT?语句,进而执行展开后的查询语句。

更新视图

目前 TiDB 中的视图不支持?ALTER VIEW view_name AS query;?语法,你可以通过以下两种方式实现视图的 “更新”:

  • 先?DROP VIEW view_name;?语句删除旧视图,再通过?CREATE VIEW view_name AS query;?语句创建新视图的方式来更新视图。
  • 使用?CREATE OR REPLACE VIEW view_name AS query;?语句覆盖已存在的同名视图。
 

CREATE OR REPLACE VIEW book_with_ratings AS SELECT b.id AS book_id, ANY_VALUE(b.title), ANY_VALUE(b.published_at) AS book_title, AVG(r.score) AS average_score FROM books b LEFT JOIN ratings r ON b.id = r.book_id GROUP BY b.id;

获取视图相关信息

使用?SHOW CREATE TABLE|VIEW view_name?语句

 

SHOW CREATE VIEW book_with_ratings\G

运行结果为:

 

*************************** 1. row *************************** View: book_with_ratings Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW `book_with_ratings` (`book_id`, `ANY_VALUE(b.title)`, `book_title`, `average_score`) AS SELECT `b`.`id` AS `book_id`,ANY_VALUE(`b`.`title`) AS `ANY_VALUE(b.title)`,ANY_VALUE(`b`.`published_at`) AS `book_title`,AVG(`r`.`score`) AS `average_score` FROM `bookshop`.`books` AS `b` LEFT JOIN `bookshop`.`ratings` AS `r` ON `b`.`id`=`r`.`book_id` GROUP BY `b`.`id` character_set_client: utf8mb4 collation_connection: utf8mb4_general_ci 1 row in set (0.00 sec)

查询?INFORMATION_SCHEMA.VIEWS?表

 

SELECT * FROM information_schema.views WHERE TABLE_NAME = 'book_with_ratings'\G

运行结果为:

 

*************************** 1. row *************************** TABLE_CATALOG: def TABLE_SCHEMA: bookshop TABLE_NAME: book_with_ratings VIEW_DEFINITION: SELECT `b`.`id` AS `book_id`,ANY_VALUE(`b`.`title`) AS `ANY_VALUE(b.title)`,ANY_VALUE(`b`.`published_at`) AS `book_title`,AVG(`r`.`score`) AS `average_score` FROM `bookshop`.`books` AS `b` LEFT JOIN `bookshop`.`ratings` AS `r` ON `b`.`id`=`r`.`book_id` GROUP BY `b`.`id` CHECK_OPTION: CASCADED IS_UPDATABLE: NO DEFINER: root@% SECURITY_TYPE: DEFINER CHARACTER_SET_CLIENT: utf8mb4 COLLATION_CONNECTION: utf8mb4_general_ci 1 row in set (0.00 sec)

删除视图

通过?DROP VIEW view_name;?语句可以删除已经创建的视图。

 

DROP VIEW book_with_ratings;

局限性

关于局限性,你可以通过阅读参考文档当中的视图章节进行了解。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-06-29 19:08:56  更:2022-06-29 19:11:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/27 2:03:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码