数据库(MySQL)-视图、存储过程、触发器
一、视图
视图的定义、作用
创建视图
语法:create view 视图名【view_xxx/v_xxx】as 查询语句
create view v_stu_man as
SELECT * from student where ssex='男'
使用视图
语法:SELECT * FROM 视图名
SELECT * FROM v_stu_man
结果:
案例1:查看男同学的信息和班级
create view v_stuman_class as
select v_stu_man.*,classname from v_stu_man
left join class on v_stu_man.classid=class.classid
结果:
注意:student 表改变,视图会跟着一起改变
UPDATE student SET sname='赵蕾蕾' WHERE sid=1
表中数据已改:
查看视图中的信息:
SELECT * FROM v_stu_man
结果:
查看库中所有视图
SELECT * from information_schema.views
where table_schema='myschool'
结果:
删除视图
drop VIEW v_stu_man
二、存储过程
存储过程的定义
创建存储过程
语法
CREATE PROCEDURE 存储过程名【proc_xxx】(形参列表)
BEGIN
一组SQL语句集
END
案例
案例1:创建最简单的存储过程
delimiter $$定制定界符,delimiter ;;恢复默认定界符
delimiter $$
create procedure proc_test()
beginselect * from student;
end $$
delimiter ;
-- 使用存储过程
CALL proc_test();
结果:
案例2:创建带参的存储过程
delimiter $$
create PROCEDURE proc_test2(in a int, -- 只入参out b int, -- 只出参inout c int -- 出入参
)
beginset a=a+1;set b = b+100;set c = c+1000;
end $$
delimiter ;#设置环境变量:@局部环境变量 @@全局环境变量
set @x=10;
set @y = 20;
set @z = 30;select @x, @y, @z;-- 运行结果为图1
-- 使用存储过程
call proc_test2(@x,@y,@z)select @x, @y, @z;
-- 运行结果为图2
结果1:
结果2:
为什么使用了存储过程后会得到这样的结果呢?
因为在我们定义形参a、b、c时,前面给他们加了修饰符:in、out、inout。所以a是只入参数:即只能将参数传入,而不参与运算,所以a为10。b是只出参,即无法给它传入值,所以它为Null。c是出入参,即既可以将参数传入,也可以参与运算输出,所以c为1030。
案例3:使用存储过程达到分页效果
delimiter $$
create procedure proc_stuPage(in curpage int,in sizepage int,-- 学生数out stucount int,-- 页数out pagecount int
)
begin #declare:声明局部变量declare cp int;set cp=(curpage-1)*sizepage;-- 把表中的值存入int类型的变量(此表只能有一条数据)select count(*) from student into stucount;set pagecount=ceiling(stucount / sizepage);select * from student limit cp,sizepage;
end $$
delimiter ;
set @a = 0; -- stucount
set @b = 0; -- pagecount
call proc_stuPage(2,3,@a,@b); -- 结果1-- 查看学生数和页数
select @a,@b -- 结果2
结果1:
结果2:
存储过程与函数的区别
语法:关键字不同,存储过程是procedure, 函数是function;
执行:存储过程可以独立执行,函数必须依赖表达式的调用;
返回值:存储过程可以定义多个返回结果, 函数只有一个返回值;
功能:函数不易做复杂的业务逻辑,但是存储过程可以。
存储过程的缺陷
维护性:存储过程的维护成本高,修改调试较为麻烦。
移植性:大多数关系型数据库的存储过程存在细微差异
协作性:没有相关的版本控制或者IDE,团队中对于存储过程的使用大多是依赖文档。
三、触发器
触发器定义
触发器是数据库中针对数据库表操作触发的 特殊的存储过程。
创建触发器
语法
delimiter $$
CREATE TRIGGER 触发器名【trig_xxx】
BEFORE/AFTER -- 执行顺序
INSERT/UPDATE/DELETE -- 触发事件
ON 表名
案例
案例1:删除学生 sid 为 1 在此之前把学生成绩删除
-- 创建触发器
delimiter $$
create trigger trig_delstu_delsc
before delete on student for each row
begindelete from sc where sid = old.sid;
end $$
delimiter ;-- 触发事件
DELETE FROM student WHERE sid=1;-- 查看学生表
select * from student;
-- 查看成绩表
select * from sc;
学生表结果:
成绩表结果:
查看所有触发器
SELECT * FROM information_schema.`TRIGGERS`
WHERE trigger_schema = 'myschool'
结果:
删除触发器
DROP TRIGGER trig_delstu_delsc
删除后查看所有触发器:
存储过程和触发器的区别
语法:关键字不同,存储 过程是procedure, 触发器是trigger
执行:存储过程需要调用才执 行,触发器自动执行
返回值:存储过程可以定义返回值, 但是触发器没有返回值;
功能:存储过程是一组特定功能的 SQL语句,触发器则是SQL语 句前后执行,本身不影响原功 能。
相关文章:

数据库(MySQL)-视图、存储过程、触发器
一、视图 视图的定义、作用 视图是从一个或者几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。但是视图只能用来查看表,不能做增删改查。 视图的作用:①简化查询 ②重写格式化数据 ③频繁访问数据库 ④过…...
js 优雅的实现模板方法设计模式
在JavaScript中,优雅地实现模板方法设计模式通常意味着我们要遵循一些最佳实践,如清晰地定义算法的骨架(模板方法),并确保子类能够灵活地扩展或修改这些算法中的特定步骤。由于JavaScript是一种动态语言,我…...
C语言——输入输出
C语言——输入输出 输入输出函数的类型getcharputcharprintf占位符的分类 scanf 什么是输入输出呢? 所谓输入输出是以计算机为主机而言的,往内存中输入数据为输入,反之从内存中输出数据为输出。 输入输出的功能 C语言本身是不提供输入输出功能…...

【微软蓝屏】微软Windows蓝屏问题汇总与应对解决策略
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...

OpenCV图像滤波(2)均值平滑处理函数blur()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在OpenCV中,blur()函数用于对图像应用简单的均值模糊(mean blur)。这种模糊效果可以通过将图像中的每个像素替…...

Android lmkd机制详解
目录 一、lmkd介绍 二、lmkd实现原理 2.1 工作原理图 2.2 初始化 2.3 oom_adj获取 2.4 监听psi事件及处理 2.5 进程选取与查杀 2.5.1 进程选取 2.5.2 进程查杀 三、关键系统属性 四、核心数据结构 五、代码时序 一、lmkd介绍 Android lmkd采用epoll方式监听linux内…...
linux shell(中)
结构化命令 if语句 if-then 最基本的结构化命令是 if-then 语句。if-then 语句的格式如下: if command thencommands ifif command; then # 通过把分号(;)放在待求值的命令尾部,可以将 then 语句写在同一行commands ifbash sh…...

VMware三种网络模式---巨细
文章目录 目录 ‘一.网络模式概述 二.桥接模式 二.NAT模式 三.仅主机模式 四.案例演示 防火墙配置: 虚拟电脑配置 前言 本文主要介绍VMware的三种网络模式 ‘一.网络模式概述 VMware中分为三种网络模式: 桥接模式:默认与宿主机VMnet0绑…...

力扣高频SQL 50 题(基础版)第一题
文章目录 力扣高频SQL 50 题(基础版)第一题1757.可回收且低脂的产品题目说明思路分析实现过程准备数据:实现方式:结果截图: 力扣高频SQL 50 题(基础版)第一题 1757.可回收且低脂的产品 题目说…...

2.1.卷积层
卷积 用MLP处理图片的问题:假设一张图片有12M像素,那么RGB图片就有36M元素,使用大小为100的单隐藏层,模型有3.6B元素,这个数量非常大。 识别模式的两个原则: 平移不变性(translation inva…...

网易《永劫无间》手游上线,掀起游戏界狂潮
原标题:网易《永劫无间》手游上线,网友:发烧严重 易采游戏网7月26日消息:自网易宣布《永劫无间》手游即将上线以来,广大游戏玩家的期待值就不断攀升。作为一款拥有丰富内容和极高自由度的游戏,《永劫无间》…...

RNN(一)——循环神经网络的实现
文章目录 一、循环神经网络RNN1.RNN是什么2.RNN的语言模型3.RNN的结构形式 二、完整代码三、代码解读1.参数return_sequences2.调参过程 一、循环神经网络RNN 1.RNN是什么 循环神经网络RNN主要体现在上下文对理解的重要性,他比传统的神经网络(传统的神…...
php 根据位置的经纬度计算距离
在开发中,我们要经常和位置打交道,要计算附近的位置、距离什么的。如下: 一.sql语句 SELECT houseID,title,location,chamber,room,toward,area,rent,is_verify,look_type,look_time, traffic,block_name,images,tag,create_time,update_time, location->&g…...

17 Python常用内置函数——基本输入输出
input() 和 print() 是 Python 的基本输入输出函数,前者用来接收用户的键盘输入,后者用来把数据以指定的格式输出到标准控制台或指定的文件对象。无论用户输入什么内容,input() 一律作为字符串对待,必要时可以使用内置函数 int()、…...

【Web】LitCTF 2024 题解(全)
目录 浏览器也能套娃? 一个....池子? 高亮主题(划掉)背景查看器 百万美元的诱惑 SAS - Serializing Authentication exx 浏览器也能套娃? 随便试一试,一眼ssrf file:///flag直接读本地文件 一个....池子? {…...

家政项目小程序的设计
管理员账户功能包括:系统首页,个人中心,用户管理,家政人员管理,家政服务管理,咨询信息管理,咨询服务管理,家政预约管理,留言板管理,系统管理 微信端账号功能…...

electron TodoList网页应用打包成linux deb、AppImage应用
这里用的是windows的wsl的ubuntu环境 electron应用打包linux应用需要linux下打包,这里用windows的wsl的ubuntu环境进行操作 1)linux ubuntu安装nodejs、electron 安装nodejs: sudo apt update sudo apt upgrade ##快捷安装 curl -fsSL http…...

【C语言】 使用fgets和fputs完成两个文件的拷贝
目录 1、使用fgets和fputs完成两个文件的拷贝 2、使用fgets统计给定文件的行号 fgets和fputs的使用方法函数原型:int fputs(const char *s,FILE *stream); char *fgets(char *s,int size,FILE *stream);fupts…...

使用PyTorch导出JIT模型:C++ API与libtorch实战
PyTorch导出JIT模型并用C API libtorch调用 本文将介绍如何将一个 PyTorch 模型导出为 JIT 模型并用 PyTorch 的 CAPI libtorch运行这个模型。 Step1:导出模型 首先我们进行第一步,用 Python API 来导出模型,由于本文的重点是在后面的部署…...

Python——异常捕获,传递及其抛出操作
01. 异常的概念 1. 程序在运行时,如果 python解释器遇到一个错误,会停止程序的执行,并且提示一些错误信息,这就是异常。 2. 程序停止执行并且提示错误信息这个动作,我们通常称之为:抛出(raise…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...

华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...