当前位置: 首页 > news >正文

MySQL数据库入门之视图、存储过程、触发器

一、视图:

1.1、视图是什么?怎么理解?

视图是从数据库的基本表(或者视图)导出的虚表(数据库只放定义它不实际存储数据,而是根据用户定义的SQL查询动态生成的结果集,具体数据存储在基本表中,所以基本表中的数据改变),视图数据改变,但是通过视图对数据进行更新(增、删、改)操作就有一定的限制从某种程度上来说,视图就像一个窗口,可以看到自己感兴趣的数据,视图始终是定义在基本表上的,所以对视图的所有操作最终都是向对应的基本表的操作。

1.2、视图的用处:

  • 简化操作:让用户关注自己需要的数据,基本表的数据通过定义视图变得更加清晰、简单。通过封装复杂的查询逻辑,使用户或应用程序可以像操作普通表一样操作视图。
  • 数据安全:使用户以多角度看同一数据,不同的用户类型通过定义不同的视图,让不同用户类型得到自己的数据。限制用户访问底层表的部分数据,通过视图只展示他们有权查看的信息。
  • 数据抽象:为不同的用户或应用提供统一的数据接口,即使底层数据结构发生变化,视图可以保持不变。视图一定程度上提供了数据的逻辑独立性。

二、存储过程:

2.1、存储过程是什么?怎么理解?

存储过程是一组预编译的SQL语句集合,存储在数据库中,并可通过一个名称调用。它可以接收输入参数、输出结果,并且能够包含流程控制语句(如条件判断和循环)。

举个例子,有一个数据库任务是计算某个用户的订单总金额。如果不使用存储过程,每次需要计算时,都需要手动写SQL语句去查找该用户的所有订单,然后对每个订单的金额进行求和。但如果创建一个存储过程 "CalculateOrderTotal",存储过程内部就已经包含了查找用户订单和计算总金额的所有SQL指令。下次需要这个信息时,只要简单地调用 "CalculateOrderTotal" 并告诉它用户ID,它就会返回结果,省去了每次都要写复杂查询的麻烦。

这就是存储过程的概念,它让数据库操作变得更高效、更简单,同时也增强了代码的复用性和数据的安全性。

2.2、存储过程的用处:

  • 提高效率:存储过程只需编译一次,之后每次调用都直接执行,减少了解析和编译SQL的时间。
  • 复用性:封装常用操作,减少代码重复,便于维护。
  • 增强安全性:限制直接访问基础表,通过参数化存储过程来执行操作。

三、触发器:

3.1、触发器是什么?怎么理解?

触发器是一种特殊类型的存储过程,它会在特定的数据库事件(如INSERT、UPDATE或DELETE)发生时自动执行。触发器又叫事件—条件—动作规则,当特定事件发生(如对表的增、删、查、改,事务的结束),对规则的条件进行检查,如果条件成立就执行规则中的动作,通常是一段SQL存储过程。触发器主要用于维护数据完整性、执行审计或自动执行业务逻辑。

3.2、触发器的用处:

  • 数据完整性:在数据变更前后自动检查或修改数据,确保满足业务规则。
  • 审计:自动记录数据更改的历史,便于追踪和审计。
  • 业务自动化:在数据变动时触发相关操作,比如订单状态更新后自动发送通知

相关文章:

  • 智能除螨—wtn6040-8s语音芯片方案引领除螨仪新时代
  • windows系统电脑外插键盘驱动出现感叹号或者显示未知设备,键盘无法输入的解决办法
  • GeoScene产品学习视频收集
  • 【UML用户指南】-02-UML的14种图
  • 二叉树链式结构的前序_中序_后续_层序遍历【详细图解】
  • leetCode-hot100-数组专题之子数组+二维数组
  • SSD图、用例描述
  • React Native 之 ToastAndroid(提示语)(二十一)
  • I2C协议详解
  • 日志输出-第四章-接口级(单体应用)前后端数据加解密 Filter 实现
  • 设计模式 17 组合模式 Composite Pattern
  • 网页设计步骤总结
  • C++ Qt:QString与数字之间的相互转换
  • es和mongdb对比
  • Ai速递5.29
  • 【剑指offer】让抽象问题具体化
  • Apache Pulsar 2.1 重磅发布
  • Debian下无root权限使用Python访问Oracle
  • Javascript设计模式学习之Observer(观察者)模式
  • Java-详解HashMap
  • JAVA之继承和多态
  • Js基础知识(一) - 变量
  • Vim Clutch | 面向脚踏板编程……
  • vuex 笔记整理
  • webpack入门学习手记(二)
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 分享几个不错的工具
  • 基于HAProxy的高性能缓存服务器nuster
  • 检测对象或数组
  • 首页查询功能的一次实现过程
  • 在Mac OS X上安装 Ruby运行环境
  • 终端用户监控:真实用户监控还是模拟监控?
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 积累各种好的链接
  • # Redis 入门到精通(七)-- redis 删除策略
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (c语言+数据结构链表)项目:贪吃蛇
  • (libusb) usb口自动刷新
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (循环依赖问题)学习spring的第九天
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)3D模板阴影原理
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET Project Open Day(2011.11.13)
  • .net Signalr 使用笔记
  • .net wcf memory gates checking failed
  • .net 使用ajax控件后如何调用前端脚本
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .NET序列化 serializable,反序列化
  • .Net组件程序设计之线程、并发管理(一)