连接表、视图和存储过程

1. 视图

1.1. 视图的概念

视图(View):虚拟表,本身不存储数据,而是封装了一个 SQL 查询的结果集。

用途

  • 只显示部分数据,提高数据访问的安全性
  • 简化复杂查询,提高复用性可维护性
  • 可为不同用户提供不同的数据视图。

虚拟表的创建连接了一个或多个数据表,不同的查询应用都可以建立在虚拟表之上。

1.2. 创建、更新和删除视图

1. 创建视图:CREATE VIEW

CREATE VIEW view_name AS
SELECT column1, column2
FROM table
WHERE condition;

嵌套视图:

当创建好一张视图之后,还可以在它的基础上继续创建视图。

2. 修改视图:ALTER VIEW

ALTER VIEW view_name AS
SELECT column1, column2
FROM table
WHERE condition

3. 删除视图:DROP VIEW

DROP VIEW view_name

1.3. 用视图简化SQL操作

1. 复杂连接视图封装

✅ 示例:封装球员与身高等级的连接

CREATE VIEW player_height_grades AS
SELECT p.player_name, p.height, h.height_level
FROM player AS p
JOIN height_grades AS h
ON p.height BETWEEN h.height_lowest AND h.height_highest;

查询:

SELECT * FROM player_height_grades WHERE height BETWEEN 1.90 AND 2.08;

2. 格式化输出视图

✅ 示例:拼接球员姓名和球队名称

CREATE VIEW player_team AS
SELECT CONCAT(player_name, '(', team.team_name, ')') AS player_team
FROM player JOIN team
ON player.team_id = team.team_id;

3. 计算字段封装

✅ 示例:统计球员比赛得分组成

CREATE VIEW game_player_score AS
SELECT game_id, player_id,(shoot_hits - shoot_3_hits)*2 AS shoot_2_points,shoot_3_hits*3 AS shoot_3_points,shoot_p_hits AS shoot_p_points,score
FROM player_score;

1.4. 视图的优点、与临时表的区别

视图的优点:

1. 安全性:

  • 视图通常为只读,避免误改数据。
  • 可基于权限控制字段访问。

2. 简洁性与复用性:

  • 简化复杂 SQL。
  • 可嵌套定义,便于模块化管理。

视图与临时表的区别:

特性

视图(View)

临时表(Temporary Table)

是否存储数据

否,虚拟表,实时查询结果

是,存储在临时空间

生命周期

持久存在(除非 DROP)

仅当前会话存在,连接关闭即消失

用途

封装查询逻辑,数据隔离

存放临时数据,如中间计算结果

支持修改数据

限制较多(如包含聚合、连接)

支持普通数据操作(增删改查)

索引支持

大多不支持索引

通常支持索引

示例应用场景:

视图:给销售人员只显示价格、销量,不显示成本。

临时表:购物车临时保存每个用户选购的商品数据。

2. 存储过程 Stored Procedure

2.1. 存储过程的定义

定义:SQL 中对一组语句的封装,可通过一次定义,多次调用,像函数一样执行。

结构组成:包含 SQL 语句、流控制语句(如循环、条件判断等)。

使用方式

CREATE PROCEDURE proc_name ([参数])
BEGIN-- 语句块
END

2.2. 存储过程的优缺点

优点:

✅ 1. 一次编译,多次执行

提前编译后存储在数据库中,后续调用无需重新解析,提高执行效率

✅ 2. 封装逻辑,提升复用性

可将复杂逻辑封装成过程,结构清晰、易于维护与复用,有利于模块化开发。

✅ 3. 减少开发工作量

开发者只需调用过程,避免重复写 SQL,提高开发效率

✅ 4. 增强数据安全性

可设置权限控制,用户只能访问授权存储过程,不直接操作底层表。

✅ 5. 降低网络通信成本

客户端只需一次调用,无需多次发送复杂 SQL,节省网络带宽与响应时间。

✅ 6. 适合执行复杂业务逻辑

封装控制流程(IF、LOOP、CASE)更容易组织复杂业务规则。

缺点:

⚠️ 1. 可移植性差

不同数据库的语法和支持程度不同(如 MySQL 与 Oracle 存储过程差异大),跨平台迁移困难

⚠️ 2. 调试不方便

多数数据库缺少完善的调试工具,过程内错误排查困难,调试成本高

⚠️ 3. 版本管理困难

存储过程通常不受代码版本控制系统(如 Git)管理,迭代不透明、易错难追踪

⚠️ 4. 维护成本高

对团队协作和文档要求高,逻辑变更需谨慎更新过程,否则容易造成逻辑失效。

⚠️ 5. 不适合高并发环境

高并发场景更强调可扩展性与解耦,存储过程绑定数据库逻辑,难以灵活应对分库分表等架构。

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

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

相关文章

微信小程序中,解决lottie动画在真机不显示的问题

api部分 export function getRainInfo() {return onlineRequest({url: /ball/recruit/getRainInfo,method: get}); }data存储json数据 data:{rainJson:{} }onLoad方法获取json数据 onLoad(options) {let that thisgetRainInfo().then((res)>{that.setData({r…

从加密到信任|密码重塑车路云一体化安全生态

目录 一、密码技术的核心支撑 二、典型应用案例 三、未来发展方向 总结 车路云系统涉及海量实时数据交互,包括车辆位置、传感器信息、用户身份等敏感数据。其安全风险呈现三大特征: 开放环境威胁:V2X(车与万物互联&#xff0…

光谱相机在地质勘测中的应用

一、‌矿物识别与蚀变带分析‌ ‌光谱特征捕捉‌ 通过可见光至近红外(400-1000nm)的高光谱分辨率(可达3.5nm),精确识别矿物的“光谱指纹”。例如: ‌铜矿‌:在400-500nm波段反射率显著低于围…

理论篇三:如何编写自定义的Webpack Loader或Plugin插件

在 Webpack 中,自定义 Loader 和 Plugin 是扩展构建能力的关键方式。以下是它们的实现方法和核心逻辑,通过代码示例和步骤拆解帮助你快速掌握。 一、自定义 Loader 1. Loader 的本质 作用:将非 JS 文件转换为 Webpack 能处理的模块。特点:纯函数,接收源文件内容,返回处理…

【算法】力扣体系分类

第一章 算法基础题型 1.1 排序算法题 1.1.1 冒泡排序相关题 冒泡排序是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换&#xff0c…

C11 日期时间处理案例

文章目录 显示当前日期时间得到当前日期时间的17位数字形式(YYYYmmddHHMMSSsss)从日期时间字符串得到time_t 类型时间戳从时期时间字符串得到毫秒单位的时间戳得到当前日期时间以毫秒为单位的时间戳一个综合案例 所有例子在VS2019上编译运行通过 显示当前日期时间 #include &…

Python 训练营打卡 Day 34

GPU训练及类的call方法 一、GPU训练 与day33采用的CPU训练不同,今天试着让模型在GPU上训练,引入import time比较两者在运行时间上的差异 import torch # 设置GPU设备 device torch.device("cuda:0" if torch.cuda.is_available() else &qu…

Ubuntu22.04 系统安装Docker教程

1.更新系统软件包 #确保您的系统软件包是最新的。这有助于避免安装过程中可能遇到的问题 sudo apt update sudo apt upgrade -y 2.安装必要的依赖 sudo apt install apt-transport-https ca-certificates curl software-properties-common -y 3.替换软件源 原来/etc/apt/s…

深入解析前端 JSBridge:现代混合开发的通信基石与架构艺术

引言:被低估的通信革命 在移动互联网爆发式增长的十年间,Hybrid App(混合应用)始终占据着不可替代的地位。作为连接 Web 与 Native 的神经中枢,JSBridge 的设计质量直接决定了应用的性能上限与开发效率。本文将突破传…

ES 面试题系列「三」

1、在设计 Elasticsearch 索引时,如何考虑数据的建模和映射? 需要根据业务需求和数据特点来确定索引的结构。首先要分析数据的类型,对于结构化数据,如数字、日期等,要明确其数据格式和范围,选择合适的字段…

HTML5快速入门-常用标签及其属性(三)

HTML5快速入门-常用标签及其属性(三) 文章目录 HTML5快速入门-常用标签及其属性(三)音视频标签&#x1f3a7; <audio> 标签 — 插入音频使用 <source> 提供多格式备选&#xff08;提高兼容性&#xff09;&#x1f3a5; <video> 标签 — 插入视频&#x1f3b5…

Qt文件:XML文件

XML文件 1. XML文件结构1.1 基本结构1.2 XML 格式规则1.3 XML vs HTML 2. XML文件操作2.1 DOM 方式&#xff08;QDomDocument&#xff09;读取 XML写入XML 2.2 SAX 方式&#xff08;QXmlStreamReader/QXmlStreamWriter&#xff09;读取XML写入XML 2.3 对比分析 3. 使用场景3.1 …

day24Node-node的Web框架Express

1. Express 基础 1.1 什么是Express node的web框架有Express 和 Koa。常用Express 。 Express 是一个基于 Node.js 的快速、极简的 Web 应用框架,用于构建 服务器端应用(如网站后端、RESTful API 等)。它是 Node.js 生态中最流行的框架之一,以轻量、灵活和易用著称。 …

uniapp实现的简约美观的票据、车票、飞机票模板

采用 uniapp 实现的一款简约美观的票据模板&#xff0c;纯CSS、HTML实现&#xff0c;用户完全可根据自身需求进行更改、扩展&#xff1b;支持web、H5、微信小程序&#xff08;其他小程序请自行测试&#xff09;&#xff0c; 可到插件市场下载尝试&#xff1a; https://ext.dclo…

esp32+IDF V5.1.1版本编译freertos报错

error: portTICK_RATE_MS undeclared (first use in this function); did you mean portTICK_PERIOD_MS 解决方法: 使用命令 idf.py menuconfig 打开配置界面配置freeRtos 使能configENABLE_BACKWARD_COMPATIBLITY

vue 水印组件

Watermark.vue <script setup lang"ts"> import { ref, onMounted, onUnmounted, watch } from vue;interface Props {text?: string;fontSize?: number;color?: string;rotate?: number;zIndex?: number;gap?: number; }const props withDefaults(def…

hbuilder中h5转为小程序提交发布审核

【注意】 [HBuilder] 11:59:15.179 此应用 DCloud appid 为 __UNI__9F9CC77 &#xff0c;您不是这个应用的项目成员。1、联系这个应用的所有者&#xff0c;请求加入项目成员&#xff08;https://dev.dcloud.net.cn "成员管理"-"添加项目成员"&#xff09;…

QT之INI、JSON、XML处理

文章目录 INI文件处理写配置文件读配置文件 JSON 文件处理写入JSON读取JSON XML文件处理写XML文件读XML文件 INI文件处理 首先得引入QSettings QSettings 是用来存储和读取应用程序设置的一个类 #include "wrinifile.h"#include <QSettings> #include <QtD…

道德经总结

道德经 《道德经》是中国古代伟大哲学家老子所著&#xff0c;全书约五千字&#xff0c;共81章&#xff0c;分为“道经”&#xff08;1–37章&#xff09;和“德经”&#xff08;38–81章&#xff09;两部分。 《道德经》是一部融合哲学、政治、人生智慧于一体的经典著作。它提…

行为型:迭代器模式

目录 1、核心思想 2、实现方式 2.1 模式结构 2.2 实现案例 3、优缺点分析 4、适用场景 1、核心思想 目的&#xff1a;将遍历逻辑与数据存储结构解耦 概念&#xff1a;提供一种机制来按顺序访问集合中的各元素&#xff0c;而不需要知道集合内部的构造 举例&#xff1a;…