数据库(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://xiahunao.cn/news/3267750.html

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

相关文章

【React学习打卡第四天】

ReactRouter 一、概念二、创建路由开发环境三、快速开始四、抽象路由模块实际开发中的router配置 五、路由导航1.声明式导航2.编程式导航 六、路由导航传参1.searchParams 传参2.params 传参 七、嵌套路由配置八、默认二级路由九、404路由配置十、俩种路由模式 一、概念 一个路…

使用Python爬虫采集亚马逊新品榜商品数据

一、引言 1.1 亚马逊新品榜的重要性 亚马逊是全球最大的电商平台之一,亚马逊新品榜展示了最新上架并受欢迎的产品。对于电商卖家和市场分析师来说,了解这些新品榜单可以帮助他们捕捉市场趋势,了解消费者喜好,从而优化产品策略和营…

视频怎么加密?常见的四种视频加密方法和软件

视频加密是一种重要的技术手段,用于保护视频内容不被未经授权的用户获取、复制、修改或传播。在加密过程中,安企神软件作为一种专业的加密工具,可以发挥重要作用。 以下将详细介绍如何使用安企神软件对视频进行加密,并探讨视频加密…

block_size设置过大错误分析(查看CUDA设备线程块大小)

block_size设置过大错误分析(查看CUDA设备线程块大小) 1 问题描述2 问题分析3 解决方法4 调试和验证5 查看设备线程块大小 1 问题描述 本人作为CUDA编程初学者,在学习编写使用CUDA计算矩阵相乘代码时发现,如果我的 block_size &g…

可能是最好的工具网站

前些苏音在刷视频,发现了一堆好用的宝藏网站,这就赶快分享给大家。 工具网站 这个网站类似于网址导航,集合了包括工具类、资源类、软件类、AI类的合集 并且站长表示励志做体验感最好的工具网,聚焦最快解决用户的需求 首先就是办…

数据库安全综合治理方案(可编辑54页PPT)

引言:数据库安全综合治理方案是一个系统性的工作,需要从多个方面入手,综合运用各种技术和管理手段,确保数据库系统的安全稳定运行。 方案介绍: 数据库安全综合治理方案是一个综合性的策略,旨在确保数据库系…

【8月EI会议推荐】第四届区块链技术与信息安全国际会议

一、会议信息 大会官网:http://www.bctis.nhttp://www.icbdsme.org/ 官方邮箱:icbctis126.com 组委会联系人:杨老师 19911536763 支持单位:中原工学院、西安工程大学、齐鲁工业大学(山东省科学院)、澳门…

一天搞定React(3)——Hoots组件【已完结】

Hello!大家好,今天带来的是React前端JS库的学习,课程来自黑马的往期课程,具体连接地址我也没有找到,大家可以广搜巡查一下,但是总体来说,这套课程教学质量非常高,每个知识点都有一个…

数据结构经典测试题4

1. #include <stdio.h> int main() { char *str[3] {"stra", "strb", "strc"}; char *p str[0]; int i 0; while(i < 3) { printf("%s ",p); i; } return 0; }上述代码运行结果是什么&#xff1f; A: stra strb strc B: s…

Rocky/Centos Linux安装Code-server,并注册成服务自启动

文章目录 Rocky/Centos Linux安装Code-server&#xff0c;并注册成服务自启动介绍安装1. 下载压缩包2. 解压缩3. 执行启动命令4. 浏览器访问5. 开机自启动 Rocky/Centos Linux安装Code-server&#xff0c;并注册成服务自启动 介绍 VS Code Server是微软推出的VSCode风格的Web…

谷歌AI拿下IMO奥数银牌!6道题轻松解出4道~

本周四&#xff0c;谷歌DeepMind团队宣布了一项令人瞩目的成就&#xff1a;&#xff1a;用 AI 做出了今年国际数学奥林匹克竞赛 IMO 的真题&#xff0c;并且距拿金牌仅一步之遥。这一成绩不仅标志着人工智能在数学推理领域的重大突破&#xff0c;也引发了全球范围内的广泛关注和…

私域电商丨软件系统开发中,一定要避开的几个坑,看懂少很多弯路

文丨微三云胡佳东&#xff0c;点击上方“关注”&#xff0c;为你分享市场商业模式电商干货。 - 大家好&#xff0c;我是软件开发胡佳东&#xff0c;每天为大家分享互联网资讯干货&#xff01; 在数字化时代的今天&#xff0c;软件开发是已经成为推动科技进步和商业发展的重要…

vmware虚拟机安装linux没有IP地址

直接设置固定IP 1、在虚拟机菜单栏选择编辑&#xff0c;然后点击虚拟网络编辑器 2、选择Vmnet8 Net网络连接方式&#xff0c;随意设置子网IP 3、点击NAT设置页面&#xff0c;查看子网掩码和网关&#xff0c;修改静态IP会用到 4、打开电脑控制面板–网络和Internet–网络连…

面试常考Linux指令

文件权限 操作系统中每个文件都拥有特定的权限、所属用户和所属组。权限是操作系统用来限制资源访问的机制&#xff0c;在 Linux 中权限一般分为读(readable)、写(writable)和执行(executable)&#xff0c;分为三组。分别对应文件的属主(owner)&#xff0c;属组(group)和其他用…

前端知识笔记之HTML

1.标签元素与属性&#xff0c;注意事项 2.多级标签排序List&#xff0c;无顺序&#xff08;Ul&#xff09;和有顺序(Ol) 3.HTML页面结构 4.页面跳转&#xff0c;注意#是统一页面的跳转 5.图片、视频、音频 标签 6.前端表单与后端方法 数据接收的demo 7.常见表单项 8.注意日期类…

Python爬虫知识体系-----Urllib库的使用

数据科学、数据分析、人工智能必备知识汇总-----Python爬虫-----持续更新&#xff1a;https://blog.csdn.net/grd_java/article/details/140574349 文章目录 1. 基本使用2. 请求对象的定制3. 编解码1. get请求方式&#xff1a;urllib.parse.quote&#xff08;&#xff09;2. ur…

Linux 安装 GDB (无Root 权限)

引入 在Linux系统中&#xff0c;如果你需要在集群或者远程操作没有root权限的机子&#xff0c;安装GDB&#xff08;GNU调试器&#xff09;可能会有些限制&#xff0c;因为通常安装新软件或更新系统文件需要管理员权限。下面我们介绍可以在没有root权限的情况下安装GDB&#xf…

谷粒商城-性能压测

1.压力测试 在项目上线前对其进行压力测试(以每个微服务为单元) 目的:找到系统能承载的最大负荷,找到其他测试方法更难发现的错误(两种类型:内存泄漏,并发与同步). 1.性能指标 响应时间(Response Time (RT)): 响应时间 指用户从客户端发起一个请求开始,到客户端接收到从服务…

2023IMO预选题几何第5题

在锐角 △ A B C \triangle ABC △ABC 中, ω ω ω 是外接圆, O O O 是外心. D D D, E E E 分别是 ω ω ω 上不同于 B B B, C C C 的点, 满足 B D BD BD ⊥ A C AC AC, C E CE CE ⊥ A B AB AB. 设直线 C O CO CO, A B AB AB 交于点 X X X, 直线 B O BO BO,…