数据库(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

二、存储过程

存储过程的定义

        存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后,再次调用不需要重复编译,用户通过指定存储过程的名字并给出参数 (如果该存储过程带有参数)来执行它。

创建存储过程

语法

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语 句前后执行,本身不影响原功 能。

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

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

相关文章

Photos框架 - 自定义媒体资源选择器(数据部分)

引言 在iOS开发中,系统已经为我们提供了多种便捷的媒体资源选择方式,如UIImagePickerController和PHPickerViewController。这些方式不仅使用方便、界面友好,而且我们完全不需要担心性能和稳定性问题,因为它们是由系统提供的&…

计算机毕业设计django+hadoop+scrapy租房可视化 租房推荐系统 租房大屏可视化 租房爬虫 spark 58同城租房爬虫 房源推荐系统

python scrapy bootstrap jquery css javascript html 租房信息数据展示 租房地址数量分布 租房类型统计 租房价格统计分析 租房面积分析 房屋朝向分析 房屋户型平均价格统计分析 房屋楼层统计分析 房屋楼层与价格统计分析 房屋地址与价格统计分析 房屋相关信息词云展示 租房…

字符指针专题

有任何不懂的问题可以评论区留言&#xff0c;能力范围内都会一一回答 #define _CRT_SECURE_NO_WARNING #include <stdio.h> int main(void) {char a w;char* b &a;*b q;printf("%c\n",*b);return 0; } 这是字符指针的普通用法&#xff0c;和一般指针无…

在服务器上同时训练多个深度学习模型【nohup、后台、重定向】

在服务器上同时训练多个深度学习模型 在服务器上跑深度学习或其他程序时&#xff0c;如果程序没有提供命令行参数设置&#xff0c;我们常常需要多次修改代码后重新部署。本文将介绍如何通过命令行工具和编辑器查看代码特定行的方法&#xff0c;并展示如何同时训练多个基于不同…

.NET程序集编辑器/调试器 dnSpy 使用介绍

原文链接&#xff1a;https://www.cnblogs.com/zhaotianff/p/17352882.html dnSpy dnSpy是一个.NET程序集调试器和编辑器。它可以用它来编辑和调试程序集&#xff0c;即使在没有源码的情况下。 主要功能&#xff1a; 调试.NET和Unity程序集 编辑.NET和Unity程序集 项目地…

【解决方案】华普微汽车智能钥匙解决方案

一、方案概述 1.什么是被动式无钥匙进入 "被动式无钥匙进入"&#xff08;Passive Keyless Entry&#xff09;是一种用于车辆、建筑物或其他设施的访问控制系统。它利用无线射频技术自动判断用户是否接近&#xff0c;并进行身份识别以执行开锁或落锁动作&#xff0c…

【23】Android高级知识之Window(四) - ThreadedRenderer

一、概述 在上一篇文章中已经讲了setView整个流程中&#xff0c;最开始的addToDisplay和WMS跨进程通信的整个过程做了什么。继文章Android基础知识之Window(二)&#xff0c;这算是另外一个分支了&#xff0c;接着讲分析在performTraversals的三个操作中&#xff0c;最后触发pe…

基于Golang+Vue3快速搭建的博客系统

WANLI 博客系统 项目介绍 基于vue3和gin框架开发的前后端分离个人博客系统&#xff0c;包含md格式的文本编辑展示&#xff0c;点赞评论收藏&#xff0c;新闻热点&#xff0c;匿名聊天室&#xff0c;文章搜索等功能。 项目在线访问&#xff1a;http://bloggo.chat/ 或 http:/…

【Web】LitCTF 2024 题解(全)

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

OAK相机支持的图像传感器有哪些?

相机支持的传感器 在 RVC2 上&#xff0c;固件必须具有传感器配置才能支持给定的相机传感器。目前&#xff0c;我们支持下面列出的相机传感器的开箱即用&#xff08;固件中&#xff09;传感器配置。 名称 分辨率 传感器类型 尺寸 最大 帧率 IMX378 40563040 彩色 1/2.…

从0到1:理发店预约剪发小程序开发笔记(上)

背景 理发师可以在小程序上设置自己的可预约时间&#xff0c;价格&#xff0c;自我介绍&#xff0c;顾客可以根据理发师的日程安排选择合适的时间进行预约和支付。这样可以提高预约的效率&#xff0c;减少沟通成本&#xff0c;方便双方的安排。 功能规划 首页展示&#xff1…

基于多种机器学习的豆瓣电影评分预测与多维度可视化【可加系统】

有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 在本研究中&#xff0c;我们采用Python编程语言&#xff0c;利用爬虫技术实时获取豆瓣电影最新数据。通过分析豆瓣网站的结构&#xff0c;我们设计了一套有效的策略来爬取电影相关的JSON格式数据。…

第1章 初识 C 语言

目录 1.1 C 语言的起源 1.2 选择 C 语言的理由 1.2.1 设计特性 1.2.2 高效性 1.2.3 可移植性 1.2.4 强大而灵活 1.2.5 面向程序员 1.2.6 缺点 1.3 C 语言的应用范围 1.4 计算机能做什么 1.5 高级计算机语言和编译器 1.6 语言标准 1.6.1 第 1 个 ANSI/ISO C 标准 …

手写模拟Spring底层原理-简易实现版

通过手写模拟Spring 了解Spring的底层源码启动过程了解BeanDefinition、BeanPostProcessor的概念了解Spring解析配置类等底层源码工作流程了解依赖注入&#xff0c;Aware回调等底层源码工作流程了解Spring AOP的底层源码工作流程 这里实现一个简化版的 Spring 框架的核心功能&a…

GraphRAG深入解析

GraphRAG深入解析 GraphRAG 深入解析概述索引查询 索引过程深入解析步骤 1&#xff1a;处理文本块步骤 2&#xff1a;图提取步骤 3&#xff1a;图增强步骤 4&#xff1a;社区总结步骤 5&#xff1a;文件处理步骤 6&#xff1a;网络可视化 查询过程深入解析本地搜索问题生成全局…

苹果安卓分发的秘密:如何选择正确的渠道(苹果安卓分发)

苹果安卓分发的重要性 随着移动互联网的普及&#xff0c;移动应用程序的开发和分发变得越来越重要。苹果安卓分发是移动应用程序开发者的首要任务之一&#xff0c;因为它直接关系到应用程序的推广和收益。 苹果安卓分发并不是一件简单的事情。开发者需要选择正确的渠道&#…

Pytorch使用教学5-视图view与reshape的区别

有同学后台留言问为什么view有时可对张量进行形变操作&#xff0c;有时就会报错&#xff1f;另外它和reshape功能好像一致&#xff0c;有什么区别呢&#xff1f;本文就带你了解PyTorch中视图的概念。 在PyTorch中对张量进行形变操作时&#xff0c;很多同学也会使用view方法&am…

监测Nginx访问日志状态码,并做相应动作

文章目录 引言I 监测 Nginx 访问日志情况,并做相应动作1.1 前提准备1.2 访问日志 502 情况,重启 bttomcat9服务1.3 其他案例:访问日志 502 情况,重启 php-fpm 服务II 将Shell 脚本check499.sh包装成systemd服务2.1 创建systemd服务2.2 配置service2.3 开机启动2.4 其他常用…

华为ICT大赛之ensp软件BGP原理与配置

BGP基础 1.用于不同自治系统AS(autonomous system)之间动态交换路由信息&#xff1b; BGP取代EGP(exterior gateway protocol)外部网关协议&#xff0c;BGP在其发布路由信息基础上可以进行路由优选&#xff0c;高效处理路由信息&#xff1b; AS:同一组织管理下&#xff0c;使…

RK3568平台(显示篇)显示系统基本概念

一.显示系统概述 linux内核中包含两类图形显示设备驱动框架&#xff1a; FB设备&#xff1a;Framebuffer图形显示框架;DRM&#xff1a;直接渲染管理器&#xff08;Direct Rendering Manager&#xff09;&#xff0c;是linux目前主流的图形显示框架&#xff1b; 在实际场景中…