视图、存储过程、触发器

  一、视图

        视图是从一个或者几个基本表(或视图)导出的表。它与基 本表不同,是一个虚表,视图只能用来从查询,不能做增删改(虚拟的表)

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;

 

create view v_vstuman_class as
select v_stu_man.* from v_stu_man 
left join class on v_stu_man.classid=class.classid

select * from v_vstuman_class;

此时,若修改表中的sname='赵蕾蕾' ,查看数据显示结果

3.查看库中所有的视图 

-- 查看库中所有的视图
select * from information_schema.VIEWS 
WHERE table_schema = 'myschool';

 4.删除视图

drop view v_stu_man;

5 视图的作用

1.简化查询

2.重写格式化数据

3.频繁访问数据库

4.过滤数据

二、存储过程

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

1.为什么使用存储过程 

  • 业务流程复杂:业务复杂时,SQL语句相互依赖,顺序执行;
  • 频繁访问数据库:每条SQL语句都需单独连接和访问数据库;
  • 先编译后执行:SQL语句的执行需要先编译。

2.创建存储过程

创建存储过程的语法:
create procedure 存储过程名字【proc_xxx】(形参列表)
begin 
    一组sql语句集

end 

3.创建最简单的存储过程

delimiter $$
create procedure proc_test()
begin select * from student;end $$
delimeter ;

4. 使用存储过程

call proc_test();

存储过程与函数的区别:

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

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

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

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

5. 带参数的存储过程

-- in 只入参(值传递)
-- out 只出参 (无)

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

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

-- 带参数的存储过程
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;   -- 11 10 null
set @y = 20;	 -- 120 20 null
set @z = 30;	 -- 1030 30 null select @x, @y, @z;call proc_test2(@x,@y,@z)select @x, @y, @z;

6.删除存储过程

drop procedure proc_stuPage; 

7.分页(面试题!) 

-- 面试题
-- 分页
-- 删除存储过程
drop procedure proc_stuPage;
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;select count(*) from student into stucount;set pagecount = ceiling(stucount / sizepage);select * from student limit cp,sizepage;
end $$
delimiter ;set @a = 0;
set @b = 0;
call proc_stuPage(2,3,@a,@b);
select @a,@b

8.存储过程的缺陷

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

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

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

三、触发器

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

1.创建触发器

创建触发器的语法:
delimiter $$
create trigger 触发器名【trig_xxx】
before/after  insert/ update / delete 
on 表名  for each row 
begin 
     触发后执行的一组sql语句
end $$
delimiter ; 

注意

• 触发器触发时间分为Before和After两种;

• 主要针对表的增删改操作,可单独指定,也可全部指定。

• 查看所有的触发器 SELECT DISTINCT EVENT_OBJECT_TABLE FROM information_schema.`TRIGGERS` WHERE EVENT_OBJECT_SCHEMA=‘数据库名' 

-- 删除学生 sid 为 1  在此之前把学生成绩删除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 = 1;select * from student;select * from sc;[SQL] delete from student where sid = 2;
受影响的行: 1
时间: 0.008ms

2.查看所有的触发器

SELECT * FROM information_schema.`TRIGGERS`
WHERE trigger_schema = 'myschool'

3.删除触发器

drop trigger trig_delstu_delsc

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

  • 语法:关键字不同,存储 过程是procedure, 触发器是trigger;
  • 功能:存储过程是一组特定功能的 SQL语句,触发器则是SQL语 句前后执行,本身不影响原功 能。
  • 执行: 存储过程需要调用才执 行,触发器自动执行;
  • 返回值 : 存储过程可以定义返回值, 但是触发器没有返回值;

 

 

 

 

 

 

 

 

 

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

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

相关文章

基于CALMET诊断模型的高时空分辨率精细化风场模拟

原文链接:基于CALMET诊断模型的高时空分辨率精细化风场模拟https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247610033&idx7&sn999fb0fa3a0e57acebdfe209587ce7f3&chksmfa826f56cdf5e640f7dba429a9213a38d1222415eccd8660f4cf9fb46fa1a5ab3c5…

Netty:基于NIO的 Java 网络应用编程框架

Netty 是一个被广泛使用的,基于NIO的 Java 网络应用编程框架,Netty框架可以帮助开发者快速、简单的实现客户端和服务端的网络应用程序。“快速”和“简单”并不用产生维护性或性能上的问题。Netty 利用 Java 语言的NIO网络编程的能力,并隐藏其…

JavaWeb笔记_JSPEL

一.JSP相关技术 1.1 JSP由来 当我们需要向页面输出大量的HTML代码的时候,我们需要通过response对象写多次来输出HTML代码 response.getWriter().write("<font>文本</font>"); 页面的展示和servlet密不可分,不利于后期代码维护,因此推出一种可以…

记录一仿真错误,波形缩放有脉冲高信号,放大看不到信号了

是因为信号拉高的时间太短&#xff0c;拉高之后又把它拉低了&#xff0c;需要仔细看一下信号生成的代码。 错误代码与正确代码##正确代码always (posedge clk or negedge rst_n)begin if(!rst_n)beginwr_en < 1d0;wr_data < 8h0;endelse if(state_c DATASEND …

前端JS特效第52波:鼠标经过文字标题百叶窗动画特效风格切换图片轮播js效果

鼠标经过文字标题百叶窗动画特效风格切换图片轮播js效果&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下&#xff1a; <html><head><meta charset"utf-8"><title>鼠标经过文字标题百叶窗动画特效风格切换图片轮播js效果</titl…

electron 网页TodoList应用打包win桌面软件数据持久化

参考&#xff1a; electron 网页TodoList工具打包成win桌面应用exe https://blog.csdn.net/weixin_42357472/article/details/140648621 electron直接打包exe应用&#xff0c;打开网页上面添加的task在重启后为空&#xff0c;历史没有被保存&#xff0c;需要持久化工具保存之前…

【Unity国产化信创平台】麒麟银河V10系统虚拟机创建

目录 一、麒麟V10系统镜像下载 二、虚拟机创建流程 三、麒麟银河系统安装流程 一、麒麟V10系统镜像下载 https://www.kylinos.cn/# 官方访问还是会有问题&#xff0c;如果有需要麒麟银河Kylin系统V10的镜像文件&#xff0c;可以留下邮箱或者私信博主获取。 二、虚拟机创…

【Gin】架构的精妙编织:Gin框架中组合模式的革新实践与技术深度解析(上)

【Gin】架构的精妙编织&#xff1a;Gin框架中组合模式的革新实践与技术深度解析(上) 大家好 我是寸铁&#x1f44a; 【Gin】架构的精妙编织&#xff1a;Gin框架中组合模式的革新实践与技术深度解析(上)✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 本次文章分为上下两部分…

MySQL练手 --- 1251. 平均售价

题目链接&#xff1a;1251. 平均售价 思路&#xff1a; 由题意可知&#xff0c;Prices表和UnitsSold表&#xff0c;表的连接关系为一对一&#xff0c;连接字段&#xff08;匹配字段&#xff09;为product_id 要求&#xff1a;查找每种产品的平均售价。而Prices表含有价格还有…

【区块链+绿色低碳】双碳数字化管控平台 | FISCO BCOS应用案例

地方政府、园区及企业实现“双碳”目标过程中存在一些挑战与难点&#xff1a; 1. 管理者难以掌握完整、准确、全面的碳排放数据进行科学决策&#xff1a;由于碳排放核算需要对数据的来源、核算方法 的规范性和采集方法的科学性有严格要求&#xff0c;当前面临碳排放数据数据采…

视频翻译保留原音色pyvideotrans+clone-voice

剪映的视频翻译时长限制5分钟以内&#xff0c;需要积分2700首次有减免大概21.6元&#xff08;1秒9积分/1元100积分&#xff09; • 视频翻译配音工具pyvideotrans 将视频从一种语言翻译为另一种语言&#xff0c;并添加配音 打包链接&#xff1a;夸克网盘分享 升级补丁&#…

Python从0到100(四十六):实现管理员登录及测试功能

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

【BUG】已解决:You are using pip version 10.0.1, however version 21.3.1 is available.

You are using pip version 10.0.1, however version 21.3.1 is available. 目录 You are using pip version 10.0.1, however version 21.3.1 is available. 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#…

QT--线程

一、线程QThread QThread 类提供不依赖平台的管理线程的方法&#xff0c;如果要设计多线程程序&#xff0c;一般是从 QThread继承定义一个线程类&#xff0c;在自定义线程类里进行任务处理。qt拥有一个GUI线程,该线程阻塞式监控窗体,来自任何用户的操作都会被gui捕获到,并处理…

BGP选路之AS-PATH

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时&#xff0c;BGP协议会对这些BGP路由的属性进行比较&#xff0c;以确定去往该目标网络的最优BGP路由。首先要比较的属性是 Preferred Value&#xff0c;然后是Local Preference&#xff0c;再次是路由生成方式&a…

BGP选路之Next Hop

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时&#xff0c;BGP协议会对这些BGP路由的属性进行比较,以确定出去往该目标网络的最优BGP路由,然后将该最优BGP路由与去往同一目标网络的其他协议路由进行比较&#xff0c;从而决定是否将该最优BGP路由放进P路由表中…

【在Linux世界中追寻伟大的One Piece】Linux进程概念

目录 1 -> 冯诺依曼体系结构 2 -> 操作系统(operator System) 2.1 -> 概念 2.2 -> 系统调用和库函数 3 -> 进程 3.1 -> 概念 3.2 -> 进程-PCB 3.3 -> 进程状态 3.3.1 -> Z(Zombie)-僵尸进程 3.3.2 -> 孤儿进程 3.4 -> 进程优先级 …

2024-07-24 buildroot c语言应用获取 kernel kobject_uevent_env 发送的消息,侦测USB口变化。

一、kobject_uevent_env 是 Linux 内核中的一个函数&#xff0c;用于发送内核事件到用户空间。它主要用于生成和发送与内核对象&#xff08;kobject&#xff09;相关的事件通知&#xff0c;这些事件通常用于通知用户空间程序&#xff08;如 udev&#xff09;有关硬件的变化或其…

git的一些使用技巧(git fetch 和 git pull的区别,git merge 和 git rebase的区别)

最近闲来无聊&#xff0c;虽然会使用git操作&#xff0c;但是 git fetch 和 git pull 的区别&#xff0c;git merge 和 git rebase的区别只是一知半解&#xff0c;稍微研究一下&#xff1b; git fetch 和 git pull 的区别 git fetch git fetch 是将远程仓库中的改动拉到本地…

解决vscode+UE5中vscode无法识别头文件,无法函数无法跳转,也无法自动补全的问题。

一、概述 接上一条博客&#xff0c;虽然解决了报错的问题&#xff0c;但是实际上的问题却没有解决&#xff0c;无论我怎么点击&#xff0c;其都无法完成跳转&#xff0c;也无法完成自动补全的问题。 在网络上搜索了很多资料后&#xff0c;发现是在使用vscode时候UE5在vscode中的…