数据库(MySQL)-视图、存储过程、触发器

news2024/9/21 14:50:22

一、视图

视图的定义、作用

        视图是从一个或者几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。但是视图只能用来查看表,不能做增删改查。
        视图的作用:①简化查询  ②重写格式化数据  ③频繁访问数据库  ④过滤数据
                

创建视图

        语法: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()
begin
    select * from student;
end $$
delimiter ;
-- 使用存储过程
CALL proc_test();

结果:

案例2:创建带参的存储过程 

delimiter $$
create PROCEDURE proc_test2(
    in a int,  -- 只入参
    out b int,  -- 只出参
    inout c int -- 出入参
)
begin
   set 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 
begin
    delete 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.coloradmin.cn/o/1951117.html

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

相关文章

如何学习Doris:糙快猛的大数据之路(从入门到专家)

引言:大数据世界的新玩家 还记得我第一次听说"Doris"这个名字时的情景吗?那是在一个炎热的夏日午后,我正在办公室里为接下来的大数据项目发愁。作为一个刚刚跨行到大数据领域的新手,我感觉自己就像是被丢进了深海的小鱼—周围全是陌生的概念和技术。 就在这时,我的…

江苏科技大学24计算机考研数据速览,有专硕复试线大幅下降67分!

江苏科技大学(Jiangsu University of Science and Technology),坐落在江苏省镇江市,是江苏省重点建设高校,江苏省人民政府与中国船舶集团有限公司共建高校,国家国防科技工业局与江苏省人民政府共建高校 &am…

pyqt designer使用spliter

1、在designer界面需要使用spliter需要父界面不使用布局,减需要分割两个模块选中,再点击spliter分割 2、在分割后,再对父界面进行布局设置 3、对于两边需要不等比列放置的,需要套一层 group box在最外层进行分割

Linux系统:date命令

1、命令详解: date 命令可以用来显示或设定系统的日期与时间。 2、官方参数: -d, --dateSTRING 通过字符串显示时间格式,字符串不能是now。-f, --fileDATEFILE 类似 --date 在 DATEFILE 的每一行生效-I[FMT], --iso-8601[FMT…

Redis的使用场景、持久化方式和集群模式

1. Redis的使用场景 热点数据的缓存 热点数据:频繁读取的数据 限时任务的操作。比如短信验证码 完成session共享的问题。因为前后端分离 完成分布式锁 商品的销售量 2. Redis的持久化方式 2.1 什么是持久化 把内存中的数据存储到磁盘的过程。同时也可以把磁盘中…

Python中的Numpy库使用方法

numpy Ndarry和创建数组的方式 NumPy数组(ndarray)是NumPy库的核心数据结构,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。 ndarray本质上是一个存放同类型元素的多维数组,其中的每个元素在内存…

TransformerEngine

文章目录 一、关于 TransformerEngine ?亮点 二、使用示例PyTorchJAXFlax 三、安装先决条件Dockerpip从源码使用 FlashAttention-2 编译 四、突破性的变化v1.7: Padding mask definition for PyTorch 五、FP8 收敛六、集成七、其它贡献论文视频最新消息 一、关于 Tr…

美团大众点评字符验证码

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 前言(…

为什么优秀员工往往最先离职?

在企业管理中有很多误区,令企业流失优秀员工和人才,根据优思学院过往的经验,大致可以分为以下几个情况。 1. 忽视帕累托法则(80/20法则) 帕累托法则(80/20法则)是六西格玛管理的基本原则&…

好的STEM编程语言有哪些?

STEM是科学(Science),技术(Technology),工程(Engineering),数学(Mathematics)四门学科英文首字母的缩写,STEM教育简单来说就是在通过在…

django_创建菜单(实现整个项目的框架,调包)

文章目录 前言代码仓库地址在线演示网址启动网站的时候出现错误渲染路径的一些说明文件结构网页显示一条错误路由顺序js打包出现问题的代码函数没有起作用关于进度开发细节显示不了图片梳理一下函数调用的流程修改一些宽度参数classjs 里面的一些细节让三个按钮可以点击设置按钮…

前端JS特效第56集:基于canvas的粒子文字动画特效

基于canvas的粒子文字动画特效&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下(全部代码在文章末尾)&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compat…

GPT-4O 的实时语音对话功能在处理多语言客户时有哪些优势?

最强AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量 我瞄了一眼OpenAI春季发布会&#xff0c;这个发布会只有26分钟&#xff0c;你可以说它是一部科幻短片&#xff0c;也可以说它过于“夸夸其谈”&#xff01;关于…

5个工具帮助你轻松将PDF转换成WORD

有时候编辑PDF文件确实不如编辑word文档方便&#xff0c;很多人便会选择先转换再编辑。但是如果还有人不知道要怎么将PDF文件转换成word文档的话&#xff0c;可以看一下这5款工具&#xff0c;各种类型的都有&#xff0c;总有一款可以帮助到你。 &#xff11;、福昕PDF转换软件 …

socket实现全双工通信,多个客户端接入服务器端

socket实现全双工通信 客户端&#xff1a; #define IP "192.168.127.80" //服务器IP地址 #define PORT 7266 // 服务器端口号int main(int argc, const char *argv[]) {//1.创建套接字&#xff1a;用于接收客户端链接请求int sockf…

MSQP Mysql数据库权限提升工具,UDF自动检测+快速反向SHELL

项目地址:https://github.com/MartinxMax/MSQP MSQP 这是一个关于Mysql的权限提升工具 安装依赖 $ python3 -m pip install mysql-connector-python 使用方法 $ python3 msqp.py -h 权限提升:建立反向Shell 在建立反向连接前,该工具会自动检测是否具有提权条件&#xff0…

4-4 数值稳定性 + 模型初始化和激活函数

数值稳定性 这里的 t t t表示层&#xff0c;假设 h t − 1 h^{t-1} ht−1是第 t − 1 t-1 t−1层隐藏层的输出&#xff0c;经过一个 f t f_{t} ft​得到第 t t t层隐藏层的输出 h t h^{t} ht。 y y y表示 x x x进来&#xff0c;第一层一直到第 d d d层&#xff0c;最后到一个损…

2024最新网络安全自学路线,内容涵盖3-5年技能提升

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

NC 二叉树的最大深度

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 求给定二叉树…

图像数据增强方法概述

图像数据增强方法概述 1. 什么是图像数据增强技术?2. 图像数据增强技术分类2.1 几何变换Python 示例代码 2.2 颜色变换2.3 噪声添加 3. 参考文献 1. 什么是图像数据增强技术? 基础概念&#xff1a;图像增强技术是计算机视觉和图像处理领域中的一个关键技术&#xff0c;主要用…