Day53 触发器,存储过程,预定义函数,自定义函数

Day53

1.触发器

由某个事件去触发某个操作,这些事件有:insert、update、delete语句;

创建触发器:

[ delimiter XX ]
create trigger 触发器名 [before | after] 触发事件 on 表名 for each row 执行语句begin多条执行语句end 加上 “结束符XX”drop trigger t1

before : 前置触发器

after :后置触发器

Ps:

new.字段:当前写法可以获得添加语句字段对应的值

old.字段:当前写法可以获得删除语句字段对应的值

创建场景 ----------------------------------------------------------------------------

创建学科表,并添加数据

CREATE TABLE course(id INT(3) PRIMARY KEY auto_increment,name VARCHAR(32),sum INT(3) DEFAULT 0
)
INSERT INTO course(name) VALUES('JavaEE');
INSERT INTO course(name) VALUES('Python');
INSERT INTO course(name) VALUES('HTML');

创建班级表,并添加数据

CREATE TABLE class(id INT(3) PRIMARY KEY auto_increment,name VARCHAR(32),sum INT(3) DEFAULT 0
)
INSERT INTO class(name) VALUES('2401JavaEE');
INSERT INTO class(name) VALUES('2402JavaEE');
INSERT INTO class(name) VALUES('2401Python');
INSERT INTO class(name) VALUES('2402Python');
INSERT INTO class(name) VALUES('2401HTML');
INSERT INTO class(name) VALUES('2402HTML');

创建学生表

CREATE TABLE student(id INT(3) PRIMARY KEY auto_increment,name VARCHAR(32),class_id INT(3),course_id INT(3)
)

1.1 需求:添加学生,并更新班级表和学科表的数据

创建触发器(添加学生数据之后,就会触发班级表和学科表更新数据的操作)

delimiter xx - 设置SQL命令的结束符

trigger - 触发器

after - 后置触发

delimiter xx
create trigger tri01 after insert on student for each rowBEGINUPDATE class SET sum=sum+1 WHERE id=new.class_id;UPDATE course SET sum=sum+1 WHERE id=new.course_id;END xx
delimiter ;
INSERT INTO student(name,class_id,course_id) VALUES('喻平',1,1);
INSERT INTO student(name,class_id,course_id) VALUES('马智威',1,1);
INSERT INTO student(name,class_id,course_id) VALUES('李林俊',2,1);
INSERT INTO student(name,class_id,course_id) VALUES('麻生希',3,2);
INSERT INTO student(name,class_id,course_id) VALUES('椎名空',4,2);

1.2 需求:删除学生,并更新班级表和学科表的数据

创建触发器(删除学生数据之前,就会触发班级表和学科表更新数据的操作)

delimiter xx
create trigger tri02 before delete on student for each rowBEGINUPDATE class SET sum=sum-1 WHERE id=old.class_id;UPDATE course SET sum=sum-1 WHERE id=old.course_id;END xx
delimiter ;DELETE FROM student WHERE id = 2;

删除存储过程

DROP TRIGGER tri01;
DROP TRIGGER tri02;

2.存储过程

注意:类似于Java里的方法

创建场景 ----------------------------------------------------------------------------

创建学生表,并添加数据

CREATE TABLE student(id INT(3) PRIMARY KEY auto_increment,name VARCHAR(32),sex VARCHAR(32),age INT(3),salary FLOAT(8,2),course VARCHAR(32)
)
INSERT INTO student(name,sex,age,salary,course) VALUES('龙俊','男',23,10000,'Java');
INSERT INTO student(name,sex,age,salary,course) VALUES('喻平','男',20,12000,'Java');
INSERT INTO student(name,sex,age,salary,course) VALUES('牛西燕','女',19,17000,'Java');
INSERT INTO student(name,sex,age,salary,course) VALUES('刘德华','男',21,15000,'Java');
INSERT INTO student(name,sex,age,salary,course) VALUES('马德华','男',27,10000,'Java');
INSERT INTO student(name,sex,age,salary,course) VALUES('霍建华','男',19,12000,'Java');
INSERT INTO student(name,sex,age,salary,course) VALUES('华晨宇','男',32,5000,'Python');
INSERT INTO student(name,sex,age,salary,course) VALUES('黄日华','男',45,4000,'Python');
INSERT INTO student(name,sex,age,salary,course) VALUES('任达华','男',28,7000,'Python');
INSERT INTO student(name,sex,age,salary,course) VALUES('周华健','男',30,8000,'Python');
INSERT INTO student(name,sex,age,salary,course) VALUES('欧阳震华','男',23,12000,'Python');
INSERT INTO student(name,sex,age,salary,course) VALUES('麻生希','女',30,7000,'HTML');
INSERT INTO student(name,sex,age,salary,course) VALUES('椎名空','女',23,6000,'HTML');
INSERT INTO student(name,sex,age,salary,course) VALUES('水野朝阳','女',28,8000,'HTML');

2.1 最简单的存储过程

查询学生表和用户表里的数据

delimiter xx
CREATE PROCEDURE pro01()BEGINSELECT * FROM student;SELECT * FROM user;END xx
delimiter ;

调用存储过程

CALL pro01();

SQL中存储过程 与 Java中方法 的区别

Java方法中的参数指的是外界传入到方法内部的数据,返回值指定是方法结束后返回的具体数据

SQL存储过程中没有返回值,但是有返回参数

存储过程中参数的分类:

in - 传入参数

out - 传出参数

inout - 传入传出参数

2.2 需求:创建存储过程,传入学生id,查询出学生姓名

delimiter xx
CREATE PROCEDURE pro02(IN s_id INT(3))BEGINSELECT name FROM student WHERE id=s_id;END xx
delimiter ;

调用存储过程

CALL pro02(2);

2.3 需求:创建存储过程,传入学生id,返回学生姓名

delimiter xx
CREATE PROCEDURE pro03(IN s_id INT(3),OUT s_name VARCHAR(32))BEGINSELECT name INTO s_name FROM student WHERE id=s_id;END xx
delimiter ;

调用存储过程

CALL pro03(3,@s_name);
SELECT @s_name;

2.4 需求:创建存储过程,传入学生id,返回学生年龄

delimiter xx
CREATE PROCEDURE pro04(INOUT param INT(3))BEGINSELECT age INTO param FROM student WHERE id=param;END xx
delimiter ;

调用存储过程

SET @param = 3;
CALL pro04(@param);
SELECT @param;

删除存储过程

DROP PROCEDURE pro01;
DROP PROCEDURE pro02;
DROP PROCEDURE pro03;
DROP PROCEDURE pro04;

3.预定义函数

理解:MySQL给我们提供的函数

注意:函数必须有返回值

3.1 数学类函数

SELECT ABS(-100);# 求绝对值
SELECT sqrt(9);  # 求平方根
SELECT mod(10,3);# 求余数
SELECT pow(2,3); # 求次方
SELECT rand();# 求随机值

3.2 字符串类函数

拼接字符串

SELECT CONCAT("用良心做教育","做真实的自己");

截取字符串(目标字符串,第几个字符,截取长度)

SELECT SUBSTR("用良心做教育",2,2);

获取长度(字节)

SELECT length("用良心做教育");

3.3 日期时间类函数

获取当前日期时间

SELECT now();
SELECT YEAR(NOW());# 获取年
SELECT MONTH(NOW());# 获取月
SELECT DAYOFMONTH(NOW());# 获取日
SELECT HOUR(NOW());# 获取时
SELECT MINUTE(NOW());# 获取分
SELECT SECOND(NOW());# 获取秒
SELECT DATE_FORMAT(NOW(),"%Y年%m月%d日 %H时%i分%s秒");

4.自定义函数

注意:MySQL的函数必须有返回值

需求:创建一个函数,传入学生id,返回学生信息

delimiter xx
CREATE FUNCTION fun(s_id INT(3)) RETURNS VARCHAR(32) DETERMINISTICBEGINDECLARE s_name VARCHAR(32);SELECT name INTO s_name FROM student WHERE id=s_id;RETURN s_name;END xx
delimiter ;

调用函数

SELECT fun(3);

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

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

相关文章

透平油氧化安定性检测 发动机油运动粘度40℃检测

透平油氧化安定性检测 透平油,也称为涡轮机油或汽轮机油,是专门用于汽轮机的润滑油。它具有良好的抗氧化安定性和抗乳化性能,主要用于发电厂蒸气轮机、水电站水轮发电机以及其他需要深度精细润滑的场合。透平油的氧化安定性是衡量其在高温条件…

服务器防漏扫,主机加固方案来解决

什么是漏扫? 漏扫是漏洞扫描的简称。漏洞扫描是一种安全测试方法,用于发现计算机系统、网络或应用程序中的潜在漏洞和安全弱点。通过使用自动化工具或软件,漏洞扫描可以检测系统中存在的已知漏洞,并提供相关的报告和建议&#xf…

编程课面向和右转的区别:深入解析与实际应用

编程课面向和右转的区别:深入解析与实际应用 在编程课程中,尤其是在学习图形化编程或更高级的文本编程时,我们常常会遇到“面向”和“右转”这两个指令。虽然它们看似简单,但在实际应用中却有着显著的区别和重要性。本文将详细探…

Python教程:一文了解从Bytes到Bits的数据转换

目录 1. 什么是Bit? 1.1 Bit的定义 1.2 Bit的用途 1.3 示例 2. 什么是Byte? 2.1 Byte的定义 2.2 Byte的用途 2.3 示例 3. Byte与Bit的关系 3.1 转换关系 3.2 示例 4. 实际应用中的Byte和Bit 4.1 数据传输 4.2 数据存储 4. Bytes与Bits的转…

YOLOv10原理与实战训练自己的数据集

课程链接:YOLOv10原理与实战训练自己的数据集_在线视频教程-CSDN程序员研修院 YOLOv10是最近提出的YOLO的改进版本。在后处理方面,提出了一致性双重分配策略用于无NMS训练,从而实现了高效的端到端检测。在模型架构方面,引入了全面…

Unity中的AssetBundleManifest

在Unity中,AssetBundleManifest是一个重要的类,它包含了关于AssetBundles的元数据,如依赖关系、哈希值等。以下是对AssetBundleManifest类中常用属性和方法的清晰归纳: 常用属性 无直接公开属性:AssetBundleManifest…

等保测评在防范数据泄露中的关键作用

#等保测评##黑龙江等保测评##哈尔滨等保测评# 在信息时代,数据已成为企业最为宝贵的资产之一,而数据泄露事件频发,不仅严重威胁企业的经济利益,更关乎国家安全和社会稳定。信息安全等级保护测评(简称“等保测评”&…

OpenCV中的圆形标靶检测——findCirclesGrid()(一)

如前所述,OpenCV中可以使用findCirclesGrid()实现圆形标靶的检测,该函数的计算流程分为1)斑点形状的检测,和2)基于规则的斑点形状的过滤与定位。第一步将类似圆斑形状的区域检测出来,但可能存在一些误检测的噪声,第二步则利用圆斑的分布规则(M*N排列)进行进一步的过滤…

ubuntu如何查看ip地址

ubuntu如何查看ip地址 方法一:使用ifconfig方法二:使用ip命令 方法一:使用ifconfig 命令行输入ifconfig: 这里inet后跟的内容就是IP地址。 方法二:使用ip命令 命令行输入:ipa ddr: 这里ine…

【Python入门与进阶】Python的运算符

Python中的运算符可以分为几类,每种运算符有特定的用法。 以下是一些主要的Python运算符及其用法: 1. 算术运算符 :加法 a 5 b 3 print(a b) # 输出 8-:减法 print(a - b) # 输出 2*:乘法 print(a * b) # 输出 …

轮到国产游戏统治Steam榜单

6月10日晚8点,《黑神话:悟空》实体版正式开启全款预售,预售开启不到5分钟,所有产品即宣告售罄。 Steam上,《黑神话:悟空》持续占据着热销榜榜首的位置。 但在《黑神话:悟空》傲人的光环下,还有一款国产游戏取得出色的成绩。 6月10日&#…

RK3568笔记三十二:PaddleSeg训练部署

一、环境 1、Autodl配置 PyTorch 1.7.0Python 3.8(ubuntu18.04)Cuda 11.02、所需环境需求 - OS: 64-bit - Python 3(3.6/3.7/3.8/3.9/3.10),64-bit version - pip/pip3(9.0.1),64-bit version - CUDA > 10.2 - cuDNN > 7.6 - PaddlePaddle (the…

“树莓派” 成为上市公司

“树莓派” 成为上市公司 树莓派公司昨日已在伦敦证券交易所首次亮相(Raspberry Pi Holdings plc)。早盘交易中,该公司股价大涨,这为伦敦首次公开发行(IPO)市场带去了一些动力。 Stable Diffusion 3 开源倒…

SaaS产品运营 | 千万不能踏入的PLG模式的六大误区

随着科技的迅速发展和市场竞争的日益激烈,越来越多的公司开始尝试采用PLG(Product Led Growth,即产品驱动增长)模式来推动其业务的发展。然而,尽管PLG模式在促进增长方面具有显著优势,但在实践中也容易出现…

先导小型五轴联动数控加工中心

先导小型五轴联动加工中心可以作为学校或培训机构的教学工具,帮助学生了解数控加工的基本原理和操作方法。它特别适用于机械、自动化、工业设计等相关专业的学生进行实践操作和课程项目。 小型五轴联动加工中心是一种能够同时控制五个自由度进行联动的加工设备。这五…

上午接到被裁员的通知,下午就收到涨薪30%的offer,我生怕公司反悔,当天就找HR签了离职协议,拿到了N+1赔偿!

大家好,我是瑶琴呀。 昨天看到一位网友分享自己被裁的经历:最近这段时间在面试,没成想上午刚被 HR 约谈裁员的事情,下午就收到下家公司涨薪 30% 的offer,这可真是天时人和,当天下午就找 HR 签了离职协议&a…

mysql索引B+树可视化演示地址

https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html

编程课学到什么年龄好就业:深入剖析与多维度思考

编程课学到什么年龄好就业:深入剖析与多维度思考 在当今数字化时代,编程技能已不再是专业人士的专属,而是越来越多人追求的职业发展路径。然而,关于何时开始学习编程以便更好地就业,却是一个颇具争议的话题。本文将从…

【产品经理】ERP订单处理2

本次讲解订单初始化成功到ERP系统过程中的后续环节。 一、根据客服备注更新订单信息 初始化订单过程中,若订单中的客服备注信息对订单进行更新,包括可能改收货信息、改商品、加赠品、指定快递等。 注意:更新订单的过程中要注意订单当前状…

【云原生】Kubernetes----Helm包管理器

目录 引言 一、Helm概述 1.Helm价值概述 2.Helm的基本概念 3.Helm名词介绍 二、安装Helm 1.下载二进制包 2.部署Helm环境 3.添加补全信息 三、使用Helm部署服务 1.创建chart 2.查看文件信息 3.安装chart 4.卸载chart 5.自定义chart服务部署 6.版本升级 7.版本…