MySQL存储过程_触发器_游标——Baidu Comate

# 问题1: 

帮我创建2个表student与score表,要求student表有id,createDate,userName,phone,age,sex,introduce,
要求score表有id,scoreName,result,studentId(student表的id外键)。
要求student表中插入5条学生信息,都要是中文的。
要求score表中对应studentId插入10条信息,每个学生ID要有2个科目的成绩。
给出DDL与DML语句。

DDL+DML

CREATE TABLE student (id INT PRIMARY KEY AUTO_INCREMENT,createDate DATE NOT NULL,userName VARCHAR(255) NOT NULL,phone VARCHAR(20) NOT NULL,age INT NOT NULL,sex ENUM('男', '女') NOT NULL,introduce TEXT
);CREATE TABLE score (id INT PRIMARY KEY AUTO_INCREMENT,scoreName VARCHAR(255) NOT NULL,result FLOAT NOT NULL,studentId INT,FOREIGN KEY (studentId) REFERENCES student(id) ON DELETE CASCADE
);
INSERT INTO student (createDate, userName, phone, age, sex, introduce) VALUES
('2023-04-01', '张三', '13800138000', 20, '男', '学习刻苦'),
('2023-04-02', '李四', '13800138001', 21, '女', '成绩优异'),
('2023-04-03', '王五', '13800138002', 22, '男', '热爱运动'),
('2023-04-04', '赵六', '13800138003', 20, '女', '文静内向'),
('2023-04-05', '孙七', '13800138004', 21, '男', '乐于助人');-- 张三的成绩
INSERT INTO score (scoreName, result, studentId) VALUES ('数学', 90, 1);
INSERT INTO score (scoreName, result, studentId) VALUES ('英语', 85, 1);-- 李四的成绩
INSERT INTO score (scoreName, result, studentId) VALUES ('数学', 88, 2);
INSERT INTO score (scoreName, result, studentId) VALUES ('物理', 92, 2);-- 王五的成绩
INSERT INTO score (scoreName, result, studentId) VALUES ('英语', 80, 3);
INSERT INTO score (scoreName, result, studentId) VALUES ('化学', 85, 3);-- 赵六的成绩
INSERT INTO score (scoreName, result, studentId) VALUES ('物理', 95, 4);
INSERT INTO score (scoreName, result, studentId) VALUES ('化学', 89, 4);-- 孙七的成绩
INSERT INTO score (scoreName, result, studentId) VALUES ('英语', 78, 5);
INSERT INTO score (scoreName, result, studentId) VALUES ('生物', 87, 5);

提问的时候一定要选中两个DDL 

# 问题2: 

根据score表的DDL添加4条语句,要求studentId为3和4,每个studentId都添加两条数据,科目是数学与英语。

 
-- 插入studentId为3的数学成绩
INSERT INTO score (scoreName, result, studentId) VALUES ('数学', 95, 3);-- 插入studentId为3的英语成绩
INSERT INTO score (scoreName, result, studentId) VALUES ('英语', 89, 3);-- 插入studentId为4的数学成绩
INSERT INTO score (scoreName, result, studentId) VALUES ('数学', 92, 4);-- 插入studentId为4的英语成绩
INSERT INTO score (scoreName, result, studentId) VALUES ('英语', 86, 4);

# 问题3: 

帮我创建一个多表联合查询以student为主表,查看学生的所有科目成绩总分,并根据总分进行倒序排名,在查询第一列添加排名顺序。

SELECT s.id AS studentId,s.userName,SUM(sc.result) AS totalScore
FROMstudent s
LEFT JOIN score sc ON s.id = sc.studentId
GROUP BY s.id, s.userName;

这条SQL语句的解释如下:

SELECT 用来指定你想从数据库中获取的字段。

s.id AS studentId 选择student表的id字段,并在结果集中将其重命名为studentId。

s.userName 选择student表的userName字段,表示学生的名字。

SUM(sc.result) AS totalScore 计算每个学生所有科目的成绩总和,并将这个总和重命名为totalScore。这里使用了SUM聚合函数来对成绩进行求和。

FROM student s 指定了主表为student,并给它设置了一个别名s,以便在查询中简化引用。

LEFT JOIN score sc ON s.id = sc.studentId 使用了左连接(LEFT JOIN)来联合score表,并给它设置了一个别名sc。连接条件是两个表中的studentId必须匹配。左连接确保即使某个学生在score表中没有成绩记录,也会出现在结果集中,其成绩总分将被计算为0。

GROUP BY s.id, s.userName 将结果集按照每个学生的id和userName进行分组,这是使用聚合函数(如SUM)时通常需要的,以确保每个学生的成绩不会被混淆在一起。

执行这条SQL语句后,你将得到一个包含每个学生ID、用户名和所有科目成绩总分的列表。

 

# 问题4:存储过程 

帮我根据两个DDL创建一个插入信息的存储过程,先插入10条学生信息,再根据插入的学生表信息插入100条对应的studentId的score成绩,
所有信息随机生成,学生表的自增序号从6开始。

调用

call InsertRandomData(); 

# 问题5:触发器 

帮我创建一个修改score表scoreName的触发器,当修改scoreName的时候触发,判断修改的scoreName是否是数学,如果是数学就改成(天书)。
并且给出测试事例。

这个触发器tr_before_update_scoreName会在score表上的UPDATE操作之前执行。当scoreName字段的新值(NEW.scoreName)是"数学"时,它会自动将scoreName的值改为"天书"。

测试示例
为了测试这个触发器,你可以按照以下步骤操作:

  1.插入测试数据


首先,向score表中插入一些测试数据,包括一个scoreName为"数学"的记录。

INSERT INTO score (scoreName, result, studentId) VALUES ('数学', 90, 1);
INSERT INTO score (scoreName, result, studentId) VALUES ('英语', 85, 1);


  1.执行更新操作

UPDATE score SET scoreName = '数学' WHERE id = 1;


接下来,尝试更新score表中scoreName为"数学"的记录

由于触发器的存在,即使你尝试将scoreName设置为"数学",它实际上会被自动更改为"天书"。

  1.验证结果
最后,通过查询来验证触发器是否按预期工作。

SELECT * FROM score WHERE id = 1;

你应该会看到类似下面的结果,其中scoreName字段的值已经被更改为"天书":

id | scoreName | result | studentId---|-----------|--------|----------
1  | 天书      | 90     | 1

 这样,你就成功地创建并测试了一个修改scoreName字段的触发器。

# 问题6:游标 

创建一个两个表的综合游标查询,要求根据学生姓名进行查询,查询的结果返回两个表的综合信息。

DELIMITER //CREATE PROCEDURE GetStudentInfoByName(IN targetName VARCHAR(255))
BEGINDECLARE done INT DEFAULT FALSE;DECLARE stu_id INT;DECLARE stu_createDate DATE;DECLARE stu_userName VARCHAR(255);DECLARE stu_phone VARCHAR(20);DECLARE stu_age INT;DECLARE stu_sex ENUM('男', '女');DECLARE stu_introduce TEXT;DECLARE sc_id INT;DECLARE sc_scoreName VARCHAR(255);DECLARE sc_result FLOAT;-- 声明游标DECLARE cur_student INFORMATION_SCHEMA.ROUTINES.RESULT_TYPE IS NOT NULL CURSOR FOR SELECT s.id, s.createDate, s.userName, s.phone, s.age, s.sex, s.introduce, sc.id AS score_id, sc.scoreName, sc.resultFROM student sLEFT JOIN score sc ON s.id = sc.studentIdWHERE s.userName = targetName;-- 声明NOT FOUND的处理DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;OPEN cur_student;read_loop: LOOPFETCH cur_student INTO stu_id, stu_createDate, stu_userName, stu_phone, stu_age, stu_sex, stu_introduce, sc_id, sc_scoreName, sc_result;IF done THENLEAVE read_loop;END IF;-- 这里可以处理每一行的数据,例如打印或存储等。SELECT stu_id, stu_createDate, stu_userName, stu_phone, stu_age, stu_sex, stu_introduce, sc_id, sc_scoreName, sc_result;END LOOP;CLOSE cur_student;
END //DELIMITER ;

调用游标

CALL GetStudentInfoByName('张三');

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

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

相关文章

onload和onunload有什么区别(代码举例说明)

onload 和 onunload 是两种常用于网页中的事件处理器(event handlers),但它们处理的是完全不同的页面生命周期事件。 onload onload 事件会在页面或指定的元素(如图片、框架等)完成加载后触发。对于页面整体来说&…

树莓派 Raspberry Pi M.2 HAT+ 现已发售!原理图流出!

​Raspberry Pi M.2 HAT 使您能够将 M.2 M-key 外设(如 NVMe 驱动器和人工智能加速器)连接到 Raspberry Pi 5。它能够提供与这些外设之间的快数据传输(高达 500 MB/s),现在就可以从树莓派的授权经销商网络购买&#xf…

c语言:strcmp

strcmp函数是用于比较两个字符串的库函数,其功能是根据ASCII值逐一对两个字符串进行比较。 语法:strcmp(str1, str2) 返回值: 如果str1等于str2,则返回0。 如果str1小于str2,则返回负数(具体值取决于C…

注意力机制篇 | MSFE:即插即用的多尺度滑窗注意力(附源码实现)

前言:Hello大家好,我是小哥谈。多尺度滑窗注意力(Multi-Scale Sliding Window Attention,MSFE)是一种用于处理图像的深度学习模型。它通过引入多尺度特征提取和滑窗注意力机制来提高图像识别的准确性。在MSFE中,模型采用多尺度卷积神经网络来提取图像的特征,然后使用滑窗…

DELPHI通过WebService进行数据交互

WebService是一种可以跨语言和平台的数据交互模式,使用非常广泛,与JSon数据格式结合,更是当前非常流行的一种模式,本章针对DELPHI通过WebService进行数据的交互做一个相对简单例子应用。 本文使用的DELPHI 版本为:DEL…

pdf文件怎么编辑?分享3个专业的pdf软件!

在数字化时代,PDF文件已成为我们工作、学习中的得力助手。然而,面对需要修改的PDF文件,许多人却感到无从下手。今天,就让我们一起探索如何轻松编辑PDF文件,并介绍几款实用的编辑软件,让你轻松应对各种PDF编…

创建型模式 (Python版)

单例模式 懒汉式 class SingleTon:# 类属性_obj None # 用来存储对象# 创造对象def __new__(cls, *args, **kwargs):# 如果对象不存在,就创造一个对象if cls._obj is None:cls._obj super().__new__(cls, *args, *kwargs)# 返回对象return cls._objif __name__…

OpenAI宫斗剧番外篇: “Ilya与Altman联手对抗微软大帝,扫除黑恶势力”,“余华”和“莫言”犀利点评

事情是这样的。 小编我是一个重度的智谱清言用户,最近智谱清言悄悄上线了一个“划词引用”功能后,我仿佛打开了新世界的大门。我甚至用这个小功能,玩出来了即将为你上映的《OpenAI宫斗剧番外篇》。 3.5研究测试:hujiaoai.cn 4研…

@Controller和@RestController区别

一、Controller 注解: Controller 注解用于定义一个控制器类,通常配合 Spring MVC 框架使用。 控制器类负责处理用户的 HTTP 请求,并将处理结果返回给客户端。 控制器类中的方法通常通过 RequestMapping 或其衍生注解来映射特定的 URL 请求…

Python中的数据类型转换

文章目录 一、转成整数形式二、转成浮点数形式三、转成字符串形式四、转成列表形式五、转成元祖形式六、json和字典转换1.json转字典2.字典转json 一、转成整数形式 使用int()方法,示例代码如下: a 5201314 result int(a) print(result) print(type(…

蓝牙Classic加密算法设计和实现,SAFER+,E0,E1,E2,E3(python)

概述 之前用python给大家实现了所有LE相关加密工具算法。bobwenstudy/BluetoothCryptographicToolbox: LE SMP加密算法设计和实现(python) (github.com),最近重温了下Classic加密,顺便将Classic所有加密算法给实现了一遍。 在蓝牙Classic Spec中&#…

5.14.3 UNETR:用于 3D 医学图像分割的 Transformers

具有收缩和扩展路径的全卷积神经网络 (FCNN) 在大多数医学图像分割应用中表现出了突出的作用。在 FCNN 中,编码器通过学习全局和局部特征以及上下文表示来发挥不可或缺的作用,这些特征和上下文表示可用于解码器的语义输出预测。 在FCNN中,收缩…

对列表进行统计和计算

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 Python的列表提供了内置的一些函数来实现统计、计算的功能。下面介绍几种常用的功能。 (1)获取指定元素出现的次数 使用列表…

数字水印 | 图像标准化论文:Digital Watermarking Robust to Geometric Distortions(二)

目录 C 变换参数的确定D 水印的影响E 可替代的标准化过程 🤖原文: Digital Watermarking Robust to Geometric Distortions 🤖前言: 这是一篇 2005 年的 SCI 一区 CCF-A,但是网上关于它的讲解貌似挺少的。文中提出…

智能车竞赛指南:从零到一,驶向自动驾驶的未来

智能车竞赛指南:从零到一,驶向自动驾驶的未来 一、智能车竞赛概览1.1 竞赛介绍1.2 竞赛分类 二、智能车开发技术基础2.1 硬件平台2.2 软件开发 三、实战案例:循线小车开发3.1 系统架构3.2 代码示例 四、技术项目:基于ROS的视觉导航…

FedSyn: Synthetic Data Generation using Federated Learning

arxiv2022,没找到是哪个刊物的,是没投中吗? 这篇是用GAN做数据生成,每个client都训练一个生成器,加噪声传到server端聚合,实验是衡量生成图片的质量。 论文地址:arxiv code:没找到 贡献 提出了提出了一种新颖的方法(FedSyn ),将联邦学习、使用 GAN的合成数据生成…

高中数学:平面向量-数量积(向量与向量的乘积)与投影

一、引题 物理上的力做功 二、数量积与投影 1、数量积 θ的范围是[0,π] 2、投影 向量的投影,依然是一个向量! 3、运算法则 易错点: 4、重要性质 这里对性质(2)要注意一下:如果 a → \mathop{a}\limits ^{\rightarrow…

AWS安全性身份和合规性之Shield

shield:盾(牌);(保护机器和操作者的)护罩,防护屏,挡板;屏障;保护物;(警察的)盾形徽章;保护人;掩护物;盾形纹徽;盾形奖牌; AWS Shield是一项AWS托管的DDoS(Distributed Denial of Service,分布式…

建模:Maya

一、常用按键 1、alt 左键 —— 环绕查看 2、alt 中键 —— 拖动模型所在面板 3、空格 —— 进入三视图模式;空格 左键按住拖动 —— 切换到对应视图 二、骨骼归零 1、T Pose 旋转模式,点击模型,摆好T姿势即可 2、复制模型设置200距离…

[AIGC] Java CompletableFuture:简介及示例

Java 8 引入了一个名为 CompletableFuture 的新库,正如其名称所示,该库提供了一种名为 “Completable Future” 的新 API,其主要目的是支持异步编程,并通过可搜索的操作将这些异步操作进行聚合管控。 文章目录 CompletableFuture …