MySQL进阶篇3-视图和存储过程以及触发器的学习使用

news2024/10/1 17:16:07

视图/存储过程(函数)/触发器

视图:由表动态生成,虚拟的表,保存的是sql的逻辑。

创建视图:

​ create [or replace] view viewName【列名列表】 as select 语句 [with [cascaded|local] check option]

修改视图:

​ 1、【or replace】必须存在。

​ 2、alter view viewName as …

删除视图:

​ drop view 【if exists】 viewName;

with [cascade|local] check option

操作视图:

1、添加数据。

【insert into view1 values(…)】数据添加到了基表中。

​ 例如,视图是id < 30的进去视图。但是通过视图添加id为40的数据,数据添加成功,但是视图查询不到。因为id<30。

解决: with cascaded check option;增加关联。

​ 通过视图1创建视图2,如果添加了限制条件,两个视图都要检查。给依赖的视图也添加了限制条件

2、 with local check option :

当前的视图限制,递归查找之前的。但是限制不进行传递操作,依赖的视图有限制就有,没有限制就没有。

3、视图更新条件:

​ 视图更新必须与基础表存在行记录1:1的关系。

​ 例如:sum min max count distinct group by、having、union、union all

视图作用:

​ 1、简化操作,直接查询视图就行

​ 2、安全。【数据库可以进行用户授权,但是不能授权到特定行和特定列上。通过视图,用户只能查询和修改他们能见到的数据】

​ 3、数据独立。视图可以帮助用户屏蔽真实表结构变化带来的影响。

存储过程

特点:

​ 1、封装、复用

​ 2、可以接收参数,也可以返回数据

​ 3、减少网络交互,效率提升

创建

create procedure name(args)

begin

​ --sql

end;

create procedure p1()
begin
	select count(*) from students;
end;

调用

call procedure_name(args);

查看存储过程

select * from infomation_schema.routines where routine_schema = 'xxx'; --查询指定数据库的存储过程及状态信息
show create procedure p1;--查询某个存储过程的定义

删除存储过程

drop procedure [if exists] p1;

语法结构

变量

1、系统变量:是MySQL服务器提供,不是由用户定义的,属于服务器层面。分为全局变量Global会话变量Session

查看系统变量:

show [session|global] variables [like '_ _ _'];
select @@[session|global] 系统变量名

设置系统变量

set [session|global] 系统变量名=值;
set @@[session|global].系统变量名 = 值;

虽然设置的是全局的,但是服务器重启后,又会初始化为默认值。

2、用户自定义变量

​ 是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用**@变量名**使用就行,其作用域为当前连接。

赋值操作

--赋值操
set @var_name = xxxx
set @var_name := xxxx
select @var_name:= xxx
select 字段名 into @var_name from 表;
--使用
select @var_name;

随便一变量不会报错,是null。

3、局部变量

​ begin----end之内,用**declare 变量名 变量类型** 来声明。

create procedure p2()
begin
	declare myCount int default 0;
	set myCount = 1;
	select myCount;
end;
call p2();

语法if elseif end if

if score > 85 then 
	set result = '优秀'
elseif score > 60 then
	set result = '及格'
else
	set result = '不及格'
end if;sql

存储过程参数

在这里插入图片描述

create procedure p4(in score int,out result varchar(10))
.......
call p4(55,@result);
select @result;

inout
set @score = 75;
call p5(@score);
select @score;

case函数

case when value1='1' then '1'
	when value1='2' then '2'
	else 3
end case;

while循环

while 1=1 do 
		sql逻辑  set ...
end while;

repeat循环

repeat
	sql逻辑 set ...
	util 条件满足,退出循环。【满不满足,至少执行一次】
end repeat;

loop循环

loop实现简单的循环,如果不在sql逻辑中增加推出循环的条件,可以实现死循环。

leave:配合循环使用,退出循环。

iterate:必须在循环中,作用是跳过当前循环剩下的语句,直接进入到下一次循环。

create procedure p1(in n int)
begi
	declare total int default 0;
	sum:loop
		if n<=0 then
			leave loop;
		end if;
		if n%2=1 then
			set n = n-1;
			iterate sum;
		end if;
		set total = total+1;
		set n = n-1;
	end loop sum;
end;

sum相当于loop循环的名称。

游标

用来存储,查询结果集的。在存储过程和函数中,可以使用游标对结果集进行循环处理【因为是结果集,需要循环处理每一行】。

使用:declare 声明,open、fetch、close

decalre cursor_name cursor for 查询语句;

open cursor_name;

fetch cursor_name into 变量

close cursor_name;

条件处理程序

在这里插入图片描述

条件处理程序,就是当遇到sql异常时,需要做的事情。

declare exit handler for SQLSTATE ‘02000’ close u_cursor;

捕获异常02000时,退出exit,并且执行close cursor操作。

for not found 也可以,处理的是02开头的状态码;

create procedure p1(int uage int)
begin
	
	delcare uname varchar(100);
	declare upr varchar(100);
	declare u_cursor cursor for select name , profession from user where age <= uage; --游标必须放在后边
	declare exit handler for SQLSTATE '02000' close u_cursor;--捕获异常
	drop table if exists tb_user_pro;
	create table tb_user_pro(
    	id int primary key auto_increment,
        name varchar(100),
        profession varchar(100)
    );
    open u_cursor;
    while true do
    	fetch u_cursor into uname,upro;
    	insert into tb_user_pro values(null,uname,upro);
    end while;
    close u_cursor;
end ;

存储函数

存储函数是有返回值的存储过程,参数函数的参数只能是IN类型的,具体语法如下:

create function p1(args…)

returns type [characteristic…]

begin

​ --sql语句

return …;

end;

characteristic说明:

deterministic:相同的输入参数,总是能产生相同的输出结果。

no sql:不包含sql语句。

reads sql data:包含读取sql的语句,但是不包含写入树的语句。

create function f1(n int)
returns int deterministic
begin
	declare total int default 0;
	while n>0 then
		set total:= total + n;
		set n:= n-1;
	end while;
	return total;
end;

select f1(100);

弊端,必须得有返回值。

但是,存储过程也能有返回值。所以,存储过程可以完全替代存储函数。

触发器

​ 触发器与表有关,在insert/update/delete之前或者之后触发,执行触发器中定义的sql语句集合。

​ 协助应用在数据库确保**数据的完整性,日志记录,数据校验**等操作。

​ 使用别名**OLD和NEW**来引用触发器中发生变化的内容。现在触发器只支持行级触发,不支持语句级触发。【update影响了5行,触发5次触发器。而不是触发一次。】

定义触发器

create trigger trigger_name
before/after insert/update/delete
on table_name for each row --行级触发器
begin
	trigger_stmt;
end;
--查看
show triggers;
--删除
drop trigger [schema_name].trigger_name; --如果没有指定schema_name,默认是当前数据库。

触发器案例

 create trigger user_insert_trigger
 	after insert on user for each row
 begin
 	insert into user_logs values(null,'insert',now(),new.id,concat("插入的内容为:",new.id,new.name,new.phone,new.email));
 end;

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

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

相关文章

开源日报 0823 | NLP 民工的乐园:中文 NLP 资源库的终极指南

文章中介绍了几个非常有用的开源项目&#xff0c;适用于不同领域的开发者和研究者。其中&#xff0c;NLP 民工的乐园是一个非常全面的中文 NLP 资源库&#xff0c;提供了丰富的语料库、词库、词法工具和预训练语言模型&#xff0c;适用于不同的 NLP 相关任务。Poetry 是一个简化…

TOWE一转二家用无线遥控插座,让生活变得简单

随着科技的进步&#xff0c;人们的生活方式正在发生改变&#xff0c;越来越多的智能家居产品进入我们的生活中&#xff0c;为我们的生活带来了极大的便利。无线遥控插座作为一种集成了无线遥控技术与插座功能的创新产品&#xff0c;在家庭、办公、商业场景有着广泛的应用。同为…

q-learning强化学习使用基础

强化学习 通过策略的方式来学习&#xff0c;q-learing&#xff08;马尔科夫链模型&#xff09; 马尔科夫链&#xff1a;奖励*折扣因子&#xff0c;R(t)reward(1)yR(t1)&#xff0c;马尔可夫链多次迭代后分布趋于稳定所以可以得到最优解 q-learning 构建qtable&#xff0c;二…

亿发2023智能ERP生产系统解决方案实施,规范中大型企业生产精细化

随着制造水平的不断增强&#xff0c;传统工厂的管理方式已经不能满足现代制造的要求。为了确保公司战略目标的实现&#xff0c;中大型制造企业需要借助信息技术来强化对业务流程的管理&#xff0c;而生产制造ERP系统的实施已成为企业走向信息化的关键战略环节。 工厂信息化建设…

YOLOv5算法改进(19)— 更换NMS(DIoU-NMS、CIoU-NMS、EIoU-NMS、GIoU-NMS 、SIoU-NMS和Soft-NMS)

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。YOLOv5中的NMS指非极大值抑制&#xff08;Non-Maximum Suppression&#xff09;&#xff0c;它是一种用于目标检测算法中的后处理技术。在检测到多个重叠的边界框时&#xff0c;NMS可以帮助选择最佳的边界框。NMS的工作原理…

main函数中两个参数的作用

一般我们在使用C语言时不太用到main函数自带的参数&#xff0c;因此最常见的main函数就像下面这样。 int main() {...... }上面这种main函数是省略了其形参的&#xff0c;C语言中规定main函数的参数只能有两个&#xff0c;习惯上这两个参数写为argc和argv&#xff0c;其中&…

SIEM 中的事件关联

什么是 SIEM 中的事件关联 SIEM 中的事件关联可帮助安全团队识别来自不同来源的安全事件并确定其优先级&#xff0c;从而提供更全面的整体安全环境视图。 在典型的 IT 环境中&#xff0c;会跨各种系统和应用程序生成大量事件和日志。孤立地看&#xff0c;其中许多事件可能看起…

3.zigbee开发,OSAL原理及使用(类似操作系统)

一。cc2530&#xff08;zigbee的一种芯片&#xff09;使用中断 通过使用OSAL进行事件的切换&#xff0c;就是中断。 二。OSAL初步使用 1.对zigbee的工程文件进行分析&#xff08;上一节的工程模版文件&#xff09; &#xff08;1&#xff09;osal初始化&#xff1a;中断暂停…

JMeter断言之JSON断言

JSON断言 若服务器返回的Response Body为JSON格式的数据&#xff0c;使用JSON断言来判断测试结果是较好的选择。 首先需要根据JSON Path从返回的JSON数据中提取需要判断的实际结果&#xff0c;再设置预期结果&#xff0c;两者进行比较得出断言结果。 下面首先介绍JSON与JSON…

Vue模板语法集(上)

1.插值 插值&#xff1a;用双大括号{{}}将数据绑定到模板中&#xff0c;实现简单的数据渲染。例如&#xff1a;<p>{{message}}</p>&#xff0c;其中message是一个变量。 1.1.3 属性 HTML属性中的值应使用v-bind指令 1.1.4 表达式 1.1.1 文本 {{msg} 1.1.2 html 使…

HY57V561620FTP_SDRAM文档总结

文章目录 前言一、sdram简介1、名称解释2、发展历史3、与原先学习的RAM区别4、SDRAM分类 二、HY57V561620FTP1、描述1、内存划分2、特征3、引脚说明4、内部结构介绍5、交流特性6、可能涉及到的命令组合 2、SDRAM 具体操作流程1、整体状态图2、SDRAM指令及时序图3、芯片初始化(这…

​全国馆藏《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作——2023学生开学季辉少许

​全国馆藏《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作——2023学生开学季辉少许

一招制胜,如何写好一份优秀的营销策划方案?

我相信很多策划人一直都在积累很多策划模版和案例&#xff0c;觉得写策划案不就是照着相似的案例抄一抄。 虽然说这样做不是什么错误&#xff0c;但太依赖这样的方式的话&#xff0c;对于自己所写的东西&#xff0c;总会有一种掌控力不足的感觉。 究其原因&#xff0c;是你钻…

成集云 | 用友U8集成聚水潭ERP(用友U8主管库存)| 解决方案

源系统成集云目标系统 方案介绍 用友U8是一套企业级的解决方案&#xff0c;可满足不同的制造、商务模式下&#xff0c;不同运营模式下的企业经营管理。它全面集成了财务、生产制造及供应链的成熟应用&#xff0c;并延伸客户管理至客户关系管理&#xff08;CRM&#xff09;&am…

容器的数据卷

容器的数据卷 操作数据卷 # 基本格式 docker volume [common] # 创建一个volume docker volume create # 显示一个或多个volume docker volume inspect # 列出所以的volume docker volume ls # 删除未使用的volume docker volume prune # 删除一个或多个volume docker volume…

计算机视觉与深度学习-卷积神经网络-纹理表示卷积神经网络-卷积神经网络-[北邮鲁鹏]

这里写目录标题 参考文章全连接神经网络全连接神经网络的瓶颈全连接神经网络应用场景 卷积神经网络卷积层(CONV)卷积核卷积操作卷积层设计卷积步长(stride)边界填充特征响应图组尺寸计算 激活层池化层(POOL)池化操作定义池化操作作用池化层超参数常见池化操作 全连接层(FC)样本…

ESD最常用的3种模型?|深圳比创达EMC

为了定量表征 ESD的特性&#xff0c;一般将 ESD 转化成模型表达方式&#xff0c;ESD 的模型有很多种&#xff0c;下面介绍最常用的三种。 1.HBM&#xff1a;Human Body Model&#xff0c;人体模型 该模型表征人体带电接触器件放电&#xff0c;Rb 为等效人体电阻&#xff0c;Cb…

Pikachu XSS(跨站脚本攻击)

文章目录 Cross-Site ScriptingXSS&#xff08;跨站脚本&#xff09;概述反射型[xss](https://so.csdn.net/so/search?qxss&spm1001.2101.3001.7020)(get)反射型xss(post)存储型xssDOM型xssDOM型xss-xxss-盲打xss-过滤xss之htmlspecialcharsxss之href输出xss之js输出 Cros…

02. Springboot集成Flyway

目录 1、前言 2、什么是Flyway&#xff1f; 3、为什么要使用 Flyway&#xff1f; 4、简单示例 4.1、创建Spring Boot工程 4.2、添加Flyway依赖 4.3、Springboot添加Flyway配置 4.4、创建执行SQL脚本 4.5、启动测试 4.6、Flyway版本管理 5、SQL脚本文件命名规则 6、…

比特币 ZK 赏金系列:第 2 部分——查找哈希冲突

在我们的零知识赏金 (ZKB) 系列的第二部分中&#xff0c;我们将其应用于解决哈希冲突难题。在这样的谜题中&#xff0c;两个不同的输入散列到相同的输出。此类赏金可用于&#xff1a; 充当煤矿中的金丝雀&#xff0c;给我们一个有价值的提醒。存在冲突是散列函数较弱的标志&…