MySQL——存储过程,触发器

BaiduComate:

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

DDL

CREATE TABLE student (
    id INT PRIMARY KEY AUTO_INCREMENT, -- 学生ID,自增主键
    createDate DATETIME NOT NULL,       -- 创建日期
    userName VARCHAR(255) NOT NULL,     -- 用户名
    phone VARCHAR(20),                   -- 电话号码
    age INT NOT NULL,                    -- 年龄
    sex ENUM('男', '女', '其他'), -- 性别
    introduce TEXT                       -- 简介
);
CREATE TABLE score (
    id INT PRIMARY KEY AUTO_INCREMENT,      -- 成绩ID,自增主键
    scoreName VARCHAR(255) NOT NULL,        -- 成绩名称(科目)
    result INT NOT NULL,                     -- 成绩结果
    studentId INT,                           -- 学生ID,外键
    FOREIGN KEY (studentId) REFERENCES student(id) -- 外键约束
);

DML

INSERT INTO student (createDate, userName, phone, age, sex, introduce) VALUES
('2023-04-01 08:00:00', '张三', '13800138000', 20, '男', '来自计算机科学专业'),
('2023-04-01 08:10:00', '李四', '13800138001', 21, '男', '数学系高材生'),
('2023-04-01 08:20:00', '王五', '13800138002', 19, '女', '物理系新生'),
('2023-04-01 08:30:00', '赵六', '13800138003', 20, '女', '化学系学生'),
('2023-04-01 08:40:00', '孙七', '13800138004', 22, '男', '文学爱好者');



-- 张三的成绩
INSERT INTO score (scoreName, result, studentId) VALUES
('数学', 95, (SELECT id FROM student WHERE userName = '张三')),
('英语', 88, (SELECT id FROM student WHERE userName = '张三'));


-- 李四的成绩
INSERT INTO score (scoreName, result, studentId) VALUES
('物理', 92, (SELECT id FROM student WHERE userName = '李四')),
('化学', 85, (SELECT id FROM student WHERE userName = '李四'));


-- 王五的成绩
INSERT INTO score (scoreName, result, studentId) VALUES
('计算机', 90, (SELECT id FROM student WHERE userName = '王五')),
('历史', 80, (SELECT id FROM student WHERE userName = '王五'));


-- 赵六的成绩
INSERT INTO score (scoreName, result, studentId) VALUES
('生物', 85, (SELECT id FROM student WHERE userName = '赵六')),
('地理', 82, (SELECT id FROM student WHERE userName = '赵六'));


-- 孙七的成绩
INSERT INTO score (scoreName, result, studentId) VALUES
('政治', 89, (SELECT id FROM student WHERE userName = '孙七')),
('音乐', 93, (SELECT id FROM student WHERE userName = '孙七'));

DQL

多表联合

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

SELECT 
    s.id AS studentId,
    s.userName,
    SUM(sc.result) AS totalScore
FROM
    student s
JOIN 
    score sc ON s.id = sc.studentId
GROUP BY 
    s.id, s.userName
ORDER BY 
    totalScore DESC;

		

存储过程

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

DELIMITER //
CREATE PROCEDURE InsertStudentAndScoreData()
BEGIN
    DECLARE v_student_id INT;
    DECLARE v_counter INT;
    DECLARE v_random_score_count INT;
    
    -- 设置学生ID自增值为6
    ALTER TABLE student AUTO_INCREMENT = 6;
    
    -- 插入10条随机学生信息
    WHILE (SELECT COUNT(*) FROM student) < 10 DO
        INSERT INTO student (createDate, userName, phone, age, sex, introduce)
        VALUES (
            NOW(),
            CONCAT('Student_', FLOOR(RAND() * 10000)),
            CONCAT('+1', FLOOR(RAND() * 899999999) + 100000000), -- 随机电话号码
            FLOOR(RAND() * (50 - 18 + 1)) + 18, -- 随机年龄在18到50之间
            ELT(1 + FLOOR(RAND() * 3), '男', '女', '其他'), -- 随机性别
            CONCAT('Introduction for ', FLOOR(RAND() * 10000)) -- 随机简介
        );
        SET v_student_id = LAST_INSERT_ID(); -- 获取最近插入的学生ID
        
        -- 为该学生随机插入1到18条成绩记录
        SET v_random_score_count = FLOOR(RAND() * 18) + 1; -- 随机决定成绩记录数
        SET v_counter = 0;
        WHILE v_counter < v_random_score_count DO
            INSERT INTO score (scoreName, result, studentId)
            VALUES (
                CONCAT('Subject_', FLOOR(RAND() * 100)), -- 随机科目名
                FLOOR(RAND() * 101), -- 随机分数0到100
                v_student_id -- 学生ID
            );
            SET v_counter = v_counter + 1;
        END WHILE;
    END WHILE;
END //
DELIMITER ;

CALL InsertStudentAndScoreData();
DELIMITER //
CREATE PROCEDURE InsertStudentAndScoreData()
BEGIN
    DECLARE v_student_id INT;
    DECLARE v_counter INT DEFAULT 0;
    DECLARE v_total_scores_to_insert INT DEFAULT 18;
    DECLARE v_scores_inserted INT DEFAULT 0;
    DECLARE v_random_student_index INT;
    DECLARE v_random_score_name VARCHAR(255);
    DECLARE v_random_result INT;
    
    -- 设置学生表的自增序号从6开始
    ALTER TABLE student AUTO_INCREMENT = 6;

    -- 插入10条随机学生信息
    WHILE v_counter < 10 DO
        INSERT INTO student(createDate, userName, phone, age, sex, introduce)
        VALUES (
            NOW(),
            CONCAT('User', FLOOR(RAND() * 10000)),
            CONCAT('+', FLOOR(RAND() * 9999999999)),
            FLOOR(RAND() * 10 + 18),
            ELT(1 + FLOOR(RAND() * 3), 'Male', 'Female', 'Other'),
            'Random Introduction'
        );
        SET v_counter = v_counter + 1;
    END WHILE;
    
    -- 初始化计数器
    SET v_counter = 0;
    
    -- 插入成绩,直到达到18条记录
    WHILE v_scores_inserted < v_total_scores_to_insert DO
        -- 随机选择一个已插入的学生ID
        SET v_random_student_index = FLOOR(RAND() * 10) + 6; -- 学生ID范围从6到15
        
        -- 生成随机成绩数据和科目名称
        SET v_random_score_name = CONCAT('Subject', FLOOR(RAND() * 10));
        SET v_random_result = FLOOR(RAND() * 101); -- 随机分数从0到100
        
        -- 插入成绩记录
        INSERT INTO score(scoreName, result, studentId)
        VALUES (v_random_score_name, v_random_result, v_random_student_index);
        
        -- 更新已插入成绩计数
        SET v_scores_inserted = v_scores_inserted + 1;
    END WHILE;
END //
DELIMITER ;

CALL InsertStudentAndScoreData();

#问题4: 触发器
帮我创建一个修改score表scoreName的触发器,当修改scoreNlame的时候脸发,判断修改的scoreName是否是数学,如果是数学就改成(天书).
并且给出测试示例。
#问题5:游标
创建一个两个表的综合游标查询,要求根据学生姓名进行查询,查询的结果返回两个表的综合信息。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全面掌握深度学习:从基础到前沿

引言&#xff1a;深入探索深度学习的世界 在人工智能&#xff08;AI&#xff09;的广阔领域中&#xff0c;深度学习已经成为最令人瞩目的技术之一。它不仅推动了科技的许多突破性进展&#xff0c;也正在改变我们的工作和生活方式。本博客旨在全面总结深度学习的关键知识点&…

Kubeblocks系列2-redis尝试之出师未捷身先死

背景&#xff1a; 上一节&#xff0c;完成了Kubeblocks系列1-安装。现在就想拿一个简单的应用测试一下kubeblocks这个所谓的神器是否好用&#xff0c;是否可以应用与生产&#xff01; Kubeblocks系列2-redis尝试 参照官方文档&#xff1a;创建并连接到 Redis 集群 确保 Red…

使用docker+jenkins构建前端项目发布到nginx

1.准备环境 为了方便公司开发优化代码&#xff0c;不需要反复地将项目包发送给运维部署&#xff0c;我们对开发环境的前端项目利用jenkinsCI/CD进行自动化部署 需要两台服务器 一台jenkins 一台发布服务器,这里发布服务器 我直接使用开发环境的服务器 将admin界面与云计算展示…

python调用百度文心一言对话模型

近日&#xff0c;百度宣布其两款主力模型 ENIRE Speed、ENIRE Lite 可以免费使用。试了一下怎么程序调用。 1.准备工作 需要注册百度智能云账号&#xff0c;也可以使用原来的百度账号登录&#xff0c;登录之后要完成实名认证&#xff0c;才能使用API调用。在千帆大模型操作台…

5.23-

回顾 I0多路复用的原理? 程序首先向操作系统发起一个IO多路复用请求&#xff0c;告诉操作系统需要监视哪些IO通道。这些IO通道可以包括网络套接字、文件描述符等操作系统随后会将这些IO通道放入一个队列中&#xff0c;并在某个IO通道就绪时&#xff08;如数据到达、文件可读…

滴滴三面 | Go后端研发

狠狠的被鞭打了快两个小时… 注意我写的题解不一定是对的&#xff0c;如果你认为有其他答案欢迎评论区留言 bg&#xff1a;23届 211本 社招 1. 自我介绍 2. 讲一个项目的点&#xff0c;因为用到了中间件平台的数据同步&#xff0c;于是开始鞭打数据同步。。 3. 如果同步的时候…

Linux-centos下安装ffmpeg的详细教程

源安装 第一种方式&#xff1a; . 首先需要安装yum源&#xff1a; 这个源安装的ffmpeg版本是3.4 yum install epel-release yum install -y https://mirrors.ustc.edu.cn/rpmfusion/free/el/rpmfusion-free-release-7.noarch.rpm然后可以安装ffmpeg yum install -y ffmpeg ff…

data studio连接到虚拟机上的openGauss

参考&#xff1a;使用DataStudio连接本地虚拟机中的opengauss数据库_big data_白日梦想家_胖七七-华为云开发者联盟 本实验虚拟机安装的是CentOS7 数据库版本是&#xff1a;openGauss-5.0.2-CentOS-64bit-all.tar.gz 1.配置pg_hba.conf 首先使用su - omm登录到omm用户&…

家电维修上门维修小程序怎么搭建制作?

​在家庭生活中&#xff0c;家电的维修问题一直是人们关注的焦点。随着微信小程序的普及&#xff0c;家电维修服务行业也迎来了线上转型的机遇。一款便捷、高效的家电维修上门维修小程序&#xff0c;不仅能为维修服务商带来新的客户&#xff0c;也能为用户带来更便捷的服务体验…

JavaWeb基础(HTML,CSS,JS)

这些知识用了三四天左右学完&#xff0c;因为是JavaWeb&#xff0c;并不是前端&#xff0c;所以只是够用&#xff0c;不是深入&#xff0c;但是这确实是学校一个学期交的东西&#xff08;JavaWeb课程&#xff09;。 总结一下网页分为三部分&#xff1a;HTML(内容结构),CSS&…

详解ArcGIS 水文分析模型构建

目录 前言 项目环境、条件 Dem 数据预览 ArcGIS模型构建器 模型搭建 填洼 流向 流量 河流长度 栅格计算器 河流链接 河网分级 栅格河网矢量化 绘制倾泻点 栅格流域提取 集水区 盆域分析 栅格转面 模型应用 导出 py 文件 完善脚本 最终效果 结束语 前言 …

网络安全技术心得体会

网络与信息安全技术心得体会 通过对网络安全这门课程的学习&#xff0c;我进一步了解了网络安全技术的相关知识。大致来说&#xff0c;所谓网络安全指的是对网络系统中各类软硬件和数据信息等提供保护屏障&#xff0c;确保数据信息不受到恶意侵入、窃取等破坏&#xff0c;保证…

modelbox验证expand和condition共用后,是否顺序保持

如图&#xff0c;在expand之后接了个condition&#xff0c;上下两个流中每一对数据buffer的顺序性是否还会保持&#xff1f; 笔者修改让condition在遇到奇数和偶数时的走向不同。 然后在response单元输出每一对数据&#xff0c;发现顺序都不变。且在处理时&#xff0c;输出会卡…

【C语言深度解剖】(16):C语言的文件读写操作

&#x1f921;博客主页&#xff1a;醉竺 &#x1f970;本文专栏&#xff1a;《C语言深度解剖》 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多C语言深度解剖点击专栏链接查看&…

微服务框架Go-kit 01 - 基础示例

一、Go kit简介 Go kit 是一个用于构建可扩展、灵活和可维护微服务的框架和工具集合。它提供了一系列库和组件&#xff0c;涵盖了微服务开发的各个方面&#xff0c;包括服务发现、负载均衡、通信、日志记录、请求跟踪、限流、熔断等。 Go kit 构建微服务时遵循一种类似于传统…

成都爱尔胡建斌院长提醒近视超过600度,记得每年检查眼底!

高度近视是指近视度数在600度及以上的一种屈光不正的状态。 近视的眼睛必定是变形的。在正常情况下&#xff0c;人的眼球类似球体&#xff0c;但随着近视加深&#xff0c;眼轴变长&#xff0c;眼球体积逐渐增大&#xff0c;整个眼球从圆球型向椭圆球形发展&#xff0c;而眼球壁…

HTTPS 协议原理详解

HTTPS 协议原理详解 什么是 HTTPS 协议什么是 SSL/TSL 层HTTPS 使用到的加密算法HTTPS 中 TLS 层的加密过程详解HTTPS 加密过程中用到的数字证书 什么是 HTTPS 协议 HTTPS &#xff08;全称&#xff1a;Hypertext Transfer Protocol Secure &#xff09;&#xff0c;是以安全为…

栈(基于动态顺序表实现的栈)

栈的简单介绍 关于栈的性质咳咳 栈&#xff1a;栈是一种特殊的线性表,其中只让在一端插入和删除元素。 后进先出 进行插入删除的那一端叫栈顶&#xff0c;另一端叫栈底 我们实现的栈是基于一个动态顺序表的的栈&#xff0c;会实现栈的 入栈&#xff0c;出栈&#xff0c;获取…

Python知识点复习

文章目录 Input & OutputVariables & Data typesPython字符串重复&#xff08;字符串乘法&#xff09;字符串和数字连接在一起print时&#xff0c;要强制类型转换int为str用input()得到的用户输入&#xff0c;是str类型&#xff0c;如果要以int形式计算的话&#xff0c…

Dijkstra算法在《庆余年》中的应用:范闲的皇宫之旅

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…