连接表、视图和存储过程

news2025/5/29 14:17:18

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.coloradmin.cn/o/2387376.html

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

相关文章

银河麒麟V10×R²AIN SUITE:用AI重构安全,以国产化生态定义智能未来

前言 银河麒麟是由国防科技大学研发、现由麒麟软件运营的国产操作系统,旨在打破国外技术垄断,保障国家信息安全。自2002年国家“863计划”启动以来,历经技术迭代与生态整合,现为国产操作系统领军品牌。其应用覆盖党政、国防、能源…

JavaScript- 3.2 JavaScript实现不同显示器尺寸的响应式主题和页面

本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 HTML和CSS系列文章 已经收录在前端专栏,有需要的宝宝们可以点击前端专栏查看&#xff…

15.进程间通信(一)

一、进程间通信介绍 进程间通信目的: 数据传输:一个进程需要将它的数据发送给另⼀个进程 资源共享:多个进程之间共享同样的资源。 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们&#xf…

AI 数据采集实战指南:基于 Bright Data 快速获取招标讯息

AI 数据采集实战指南:基于Bright Data快速获取招标讯息 在招标行业中,快速、准确地获取招标公告、项目详情、投标截止日期和其他关键招标信息,是投标企业提高竞标成功率的核心竞争力。然而,招标信息往往分散在不同的平台和网页&a…

cursor使用mcp

问题说明 mcp就相当于给AI安装了工具包,它可以调用获取接口文档,网页,数据库等,基本上所有的mcp都是node程序,少数需要python环境 使用说明 使用mcp-mysql举例,下面是配置json "mysql": {&qu…

小白成长之路-计算机网络(四)

文章目录 前言一、网络连接查看1.netstat2.ss3.bond绑定3.1准备好这三个文件3.2添加bond配置文件3.3关闭网络图形化服务3.4重启 4.Linux下的抓包工具Wireshark 5、web压力测试工具6、路由追踪命令 二、[练习题](https://blog.csdn.net/m0_70730767/article/details/148262716?…

【Agent】MLGym: A New Framework and Benchmark for Advancing AI Research Agents

arxiv: https://arxiv.org/pdf/2502.14499 简介 Meta 推出的 MLGym 框架及配套基准 MLGym-Bench,为评估和开发LLM Agent在 AI 研究任务中的表现提供了全新工具。作为首个基于 Gym 的机器学习任务环境,MLGym 支持强化学习等算法对代理的训练&#xff0c…

Web安全测试-文件上传绕过-DVWA

Web安全测试-文件上传绕过-DVWA 很多网站都有上传资源(图片或者文件)的功能,资源上传后一般会存储在服务器的一个文件夹里面,如果攻击者绕过了上传时候的文件类型验证,传了木马或者其他可执行的代码上去,那服务器就危险了。 我用…

现代 CSS 高阶技巧:实现平滑内凹圆角的工程化实践

通过 数学计算 CSS mask 复合遮罩 实现的真正几何内凹效果: 背景是一张图片,用来证明中间的凹陷是透明的。 完整代码: app.js import FormPage from "./pages/formPage"; import "./App.css"; const App () > {re…

【运维自动化-标准运维】如何实现在不同步骤间传递参数

当流程有多个步骤时&#xff0c;经常需要把前面某个个步骤处理的结果传递给下一个或后面的步骤使用&#xff08;输出作为输入&#xff09;&#xff0c;这就是跨步骤传参的场景&#xff0c;标准运维通过特有的标记符号"<SOPS_VAR>key:value</SOPS_VAR> "来…

[AI]主流大模型、ChatGPTDeepseek、国内免费大模型API服务推荐(支持LangChain.js集成)

主流大模型特色对比表 模型核心优势适用场景局限性DeepSeek- 数学/代码能力卓越&#xff08;GSM8K准确率82.3%&#xff09;1- 开源生态完善&#xff08;支持医疗/金融领域&#xff09;7- 成本极低&#xff08;API价格仅为ChatGPT的2%-3%&#xff09;5科研辅助、代码开发、数据…

手机IP地址更换的影响与操作指南

在移动互联网时代&#xff0c;IP地址如同手机的“网络身份证”&#xff0c;其变更可能对上网体验、隐私安全及服务访问产生连锁反应。无论是为了绕过地域限制、保护隐私&#xff0c;还是解决网络冲突&#xff0c;了解IP更换的影响与正确操作方法都至关重要。本文将系统分析影响…

MongoDB 安全机制详解:全方位保障数据安全

在当今数据驱动的时代&#xff0c;数据库安全至关重要。MongoDB 作为一款流行的 NoSQL 数据库&#xff0c;广泛应用于 Web 应用、大数据分析和物联网等领域。然而&#xff0c;随着 MongoDB 的普及&#xff0c;其安全性也面临诸多挑战&#xff0c;如未授权访问、数据泄露和注入攻…

嵌入式学习之系统编程(六)线程

目录 一、线程 &#xff08;一&#xff09;线程概念 &#xff08;二&#xff09;特征 &#xff08;三&#xff09;优缺点 二、线程与进程的区别&#xff08;面问&#xff09; 三、多线程程序设计步骤 四、线程的创建&#xff08;相关函数&#xff09; 1、pthread_create…

大语言模型 提示词的少样本案例的 演示选择与排序新突破

提示词中 演示示例的选择与排序 这篇论文《Rapid Selection and Ordering of In-Context Demonstrations via Prompt Embedding Clustering》聚焦于提升大语言模型(LLMs)在自适应上下文学习(ICL)场景中演示示例的选择与排序效率 一、论文要解决的问题 在上下文学习(ICL)…

【算法篇】二分查找算法:基础篇

题目链接&#xff1a; 34.在排序数组中查找元素的第一个和最后一个位置 题目描述&#xff1a; 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返…

重磅发布 | 复旦533页《大规模语言模型:从理论到实践(第2版)》(免费下载)

在人工智能浪潮席卷全球的今天&#xff0c;大语言模型正以前所未有的速度推动着科技进步和产业变革。从 ChatGPT 到各类行业应用&#xff0c;LLM 不仅重塑了人机交互的方式&#xff0c;更成为推动学术研究与产业创新的关键技术。 面对这一飞速演进的技术体系&#xff0c;如何系…

智能体赋能效率,企业知识库沉淀价值:UMI企业智脑的双轮驱动!

智能体企业知识库&#xff1a;UMI企业智脑的核心功能与价值 在人工智能技术飞速发展的今天&#xff0c;企业智能化转型已经成为不可逆转的趋势。作为企业级AI智能体开发平台的佼佼者&#xff0c;优秘智能推出的UMI企业智脑&#xff0c;以其强大的智能体开发能力和全面的企业知…

vue项目 build时@vue-office/docx报错

我在打包vue项目时&#xff0c; 开始用的npm run build和cnpm run build&#xff0c;总是提示 vue-office/docx 错误&#xff0c;尝试过用cnpm重新安装node_modules几次都没用。类似下面的提示一直有。 Error: [commonjs--resolver] Failed to resolve entry for package "…

#RabbitMQ# 消息队列入门

目录 一 MQ技术选型 1 运行rabbitmq 2 基本介绍 3 快速入门 1 交换机负责路由消息给队列 2 数据隔离 二 Java客户端 1 快速入门 2 WorkQueue 3 FanOut交换机 4 Direct交换机 5 Topic交换机 *6 声明队列交换机 1 在配置类当中声明 2 使用注解的方式指定 7 消息转…