【MySQL】视图、存储过程、触发器

news2024/10/4 11:50:52

目录

一、视图

1. 创建视图

2. 视图的使用

3. 查看视图

4. 删除视图

5. 视图的作用

二、存储过程 

1. 存储过程的创建

2. 使用存储过程

3. 带参数的存储过程

3.1 分页

4. 存储过程与函数的区别

5. 存储过程的缺陷

三、 触发器  -- 隐式执行

1. 创建触发器

2. 查看库中所有触发器

3. 删除触发器

4. 什么是触发器

5. 存储过程和触发器的区别


一、视图

        视图是从一个或者几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。

        视图只能用来查询,不能做增删改

1. 创建视图

-- create view 视图名【view_xxx / v_xxx】

-- as 查询语句

create view v_stu_man as

select * from student where ssex='男';

2. 视图的使用

select * from v_stu_man;

--

select * from v_stu_man

left join class on v_stu_man.classid=class.classid;

select * from v_stu_man vsm             -- 别名vsm

left join class on vsm.classid=class.classid;

create view v_vstunman_class as

select v_stu_man.*,classname from v_stu_man

left join class on v_stu_man.classid=class.classid;

select * from v_vstunman_class;

update student set sname='赵雷雷' where sid=1;

select * from student;

3. 查看视图

(1)查看视图的创建

        show create view 视图名;

(2)查看库中所有的视图

        select * from information_schema.views

                where table_schema='myschool';

4. 删除视图

        drop view v_stu_man;

5. 视图的作用

(1)简化查询

(2)重写格式化数据

(3)频繁访问数据库

(4)过滤数据

二、存储过程 

        本质是一个函数

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

1. 存储过程的创建

-- create procedure 存储过程名【proc_xxx】(形参列表)

-- begin

--   一组sql语句集

-- end

-- 创建最简单存储过程

delimiter $$    -- 定制定界符

create procedure proc_test()

begin

    select * from student;

end $$

delimiter ;

2. 使用存储过程

        call proc_test();

3. 带参数的存储过程

delimiter $$

create procedure proc_test2(

    in a int,     -- in 只入参(值传递)

    out b int,    -- out 只出参

    inout c    int   -- inout 出入参(引用传递)

)

begin

    set a=a+1;

    set b=b+100;

    set c=c+1000;

end $$



delimiter ;

-- 环境变量  @局部变量,   @@ 全局变量

        set @x=10;

        set @y=20;

        set @z=30;

        call proc_test2(@x,@y,@z);

        select @x,@y,@z;

-- 面试题

3.1 分页
delimiter $$

create procedure proc_stuPage(      -- 定义形参

    in curpage int,      -- 页码

    in sizepage int,     -- 步长(每页记录数量)

    out stucount int,    -- 记录总数(学生)

    out pagecount int    -- 页码总数

)

begin

    declare cp int;       -- 位置

    set cp = (curpage-1)*sizepage;   -- (页码-1)*步长

    select count(*) from student into stucount;      -- into:count(*)值给stucount

    set pagecount = ceiling(stucount / sizepage);    -- ceiling 向上取整

    select * from student limit cp,sizepage;       -- 不允许写表达式

end $$

delimiter ;

-- 定义实参

        set @a = 0;

        set @b = 0;

        call proc_stuPage(2,3,@a,@b);

        select @a,@b;

-- 删除存储过程

        drop procedure proc_stuPage;

4. 存储过程与函数的区别

(1)语法

        关键字不同,存储过程是procedure,函数是function;

(2)返回值

        存储过程可以定义多个返回结果,函数只有一个返回值;

(3)执行

        存储过程可以独立执行,函数必须依赖表达式的调用;

(4)功能

        函数不易做复杂的业务逻辑,但是存储过程可以。

5. 存储过程的缺陷

(1)维护性

        存储过程的维护成本高,修改调试较为麻烦。

(2)移植性

        大多数关系型数据库的存储过程存在细微差异。

(3)协作性

        没有相关的版本控制或者IDE,团队中对于存储过程的使用大多是依赖文档。

三、 触发器  -- 隐式执行

        触发器是数据库中针对数据库表操作触发的特殊的存储过程。

1. 创建触发器

-- delimiter $$

-- create trigger 触发器【trig_xxx】

-- before/after   insert /update/delete

-- on 表名  for each row

-- begin

--     触发后执行的一组sql语句

-- end $$

-- delimiter ;

-- 删除学生表数据,先删从表sc的数据

delimiter $$

create trigger trig_delstu_delsc

before delete on student for each row

begin

    -- old 已经存在的数据   new 还不存在的数据

    delete from sc where sid=old.sid;

end $$

delimiter ;

delete from student where sid=16;

select * from sc;

select * from student;

2. 查看库中所有触发器

select * from information_schema.`triggers`

where trigger_schema='myschool';

3. 删除触发器

        drop trigger 触发器名;

drop trigger trig_delstu_delsc;

4. 什么是触发器

        

5. 存储过程和触发器的区别

(1)语法

        关键字不同,存储过程是procedure,触发器是trigger;

(2)返回值

        存储过程可以定义返回值,但是触发器没有返回值;

(3)执行

        存储过程需要调用才执行,触发器自动执行;

(4)功能

        存储过程是一组特定功能的SQL语句,触发器则是SQL语句前后执行,本身不影响原功能。

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

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

相关文章

太原网站制作打造企业网站的关键要素

太原网站制作:打造企业网站的关键要素 在数字化时代,企业网站成为了品牌形象和市场营销的重要一环。太原的企业在进行网站制作时,需要关注几个关键要素,以确保网站能够有效提升企业竞争力和用户体验。 **1. 目标明确** 在网站制…

【Linux系统编程】第二十七弹---文件描述符与重定向:fd奥秘、dup2应用与Shell重定向实战

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、文件描述符fd 1.1、0 & 1 & 2 1.2、文件描述符的分配规则 2、重定向 3、使用 dup2 系统调用 3.1、> 输出…

《业务三板斧:定目标、抓过程、拿结果》读书笔记1

这个书是24年新书,来自阿里系的人的作品,还可以。今天先看前沿部分的精彩部分: 我们在服务企业的过程中,发现了一个常见的管理现象:管理者自 己承担了团队里重要的项目,把风险和压力都集中在自己身上。因 此…

(10)MATLAB莱斯(Rician)衰落信道仿真1

文章目录 前言一、莱斯分布随机变量二、仿真代码与结果1.仿真代码2.仿真结果画图 后续 前言 首先给出莱斯衰落信道模型,引入了莱斯因子K,并给出莱斯分布的概率密度函数公式。然后导出莱斯分布随机变量的仿真表示式,建立MATLAB仿真代码&#…

为什么晶振被称为芯片的心脏?(全网最准确解释)

晶振是电路中非常常见的一个元件,常常被人们称为芯片的心脏,确实如此,没有了晶振,可以说一般情况下芯片就无法工作。 为什么晶振被称为芯片的心脏?(全网最准确解释) STM32 软件触发ADC采集 STM…

OpenAI o1 与 GPT-4o:前沿AI全面比较下你更倾向哪一款

前言 就在前不久,OpenAI 发布了推理能力更强可达理科博士生水准的o1 模型,业界也表示这标志着人工智能发展的新里程碑,特别是在复杂问题解决和推理方面。 然而,该模型与其前身GPT-4o有很大不同,后者仍然广泛用于通用…

【JAVA开源】基于Vue和SpringBoot的宠物咖啡馆平台

本文项目编号 T 064 ,文末自助获取源码 \color{red}{T064,文末自助获取源码} T064,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

Stable Diffusion绘画 | 插件-Deforum:动态视频生成(终篇)

Deforum 中其他模块主要是服务于上传视频的,而视频转绘有其他效果更好的插件。 初始化 除了 图像初始化 模块,其他模块都用不上: 上一篇文章生成的视频,都用了图像初始化功能。 像我这样,拖入一张图片,D…

Java - LeetCode面试经典150题 - 矩阵 (四)

矩阵 36. 有效的数独 题目 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff0…

【黑马点评】2 商户查询缓存

【黑马点评】2 商户查询缓存 2 商户查询缓存2.1 添加商户缓存2.1.1 添加商户信息缓存 --修改ShopController中的queryShopById方法2.1.2 添加商户类别缓存(作业)--修改ShopController中的queryTypeList方法 2.2 缓存更新策略2.2.1 数据库缓存不一致解决方…

测试H7-TOOL的CANFD助手J1939批量数据传输连续运行30个小时稳定不丢包

根据客户需求做的一个不断电连续运行测试。 测试条件 1、H7-TOOL的CAN/CANFD助手控制一个节点设备 2、使用J1939协议 3、经典CAN方式,波特率250Kbps J1939测试命令,250ms一次发送接收测试 昨天下午三点到今晚9点半,共计30个小时不断电连续测…

C++ STL 初探:打开标准模板库的大门

文章目录 C STL 初探:打开标准模板库的大门前言第一章: 什么是STL?1.1 标准模板库简介1.2 STL的历史背景1.3 STL的组成 第二章: STL的版本与演进2.1 不同的STL版本2.2 STL的影响与重要性 第三章: 为什么学习 STL?3.1 从手动编写到标准化解决方…

MongoDB集群模式详解及应用实战

目录 本节课内容: 集群搭建 1.创建3个目录: 2.编辑配置文件 ​编辑 3.启动: 4.看看: 5.另外,两个如上1,2,3步骤操作 ,但是日志目录,端口什么的需要改一下即可。 6.准备联通性: 先连主节点: 搭建集群环境(看文档) 本节课内容: 集群搭建 1.创建3个目录…

两数相除(c语言)

1.//给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。 //整数除法应该向零截断,也就是截去(truncate)其小数部分。 // 例如,8.345 将被截断为 8 ,…

【黑马点评】1 项目导入以及短信功能

苍穹外卖结束之后,进一步学习Redis的使用。学习Redis的实战篇,黑马点评。 这是复现过程中的详细笔记。 【黑马点评】1 项目导入以及短信功能 1 项目导入以及短信登录1.1 导入黑马点评项目1.1.1 导入SQL1.1.2 有关当前模型1.1.3 导入后端项目1.1.4 导入前…

植物种类识别系统源码分享

植物种类识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

大数据分析案例-基于逻辑回归算法构建抑郁非抑郁推文识别模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

鼠标一动,桌面起飞?Kando 如何改变你的工作流

鼠标一动,桌面起飞?Kando 如何改变你的工作流 想要更快、更有趣地操作你的桌面?Kando,这款跨平台的 Pie Menu 工具,帮你实现这一切。本文将为你介绍 Kando 的功能特点、适用场景,以及如何快速上手。 什么是…

Stable Diffusion绘画 | 插件-Deforum:商业LOGO广告视频

第1步:在 Deforum 的「初始化」中上传需要展示的 LOGO图片: 第2步:在「运行」模块进行设置: 设置宽高:保持与初始化上传图片的像素一致设置迭代步数:步数越高,视频细节越好 其他参数保持默认&…

【树形DP】AT_dp_p Independent Set 题解

step 1 题意理解 有一棵有 N N N 个顶点的树,编号为 1 , 2 , … , N 1,2,…,N 1,2,…,N。 Taro 决定将每个顶点涂成白色或黑色。 在这里,不允许将相邻的两个顶点都涂成黑色。 找出可以涂色的方式数量,对 1 0 9 7 10^9 7 1097 取模。 …