MySQL——存储过程,触发器

news2024/9/24 17:14:22

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:游标
创建一个两个表的综合游标查询,要求根据学生姓名进行查询,查询的结果返回两个表的综合信息。

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

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

相关文章

迷你手持小风扇哪个牌子质量好点?这五款迷你手持小风扇不要错过

随着空调的普及&#xff0c;我们对夏日热浪的抵抗力逐渐减弱。当从凉爽的空调屋步入闷热的户外、拥挤的交通工具或公共场所时&#xff0c;如何抵御热浪的侵袭成为大众关注的焦点。在这样的背景下&#xff0c;迷你手持小风扇凭借其便携性和即时降温功能&#xff0c;成为众多人的…

和可被k整除的子数组 ---- 前缀和

题目链接 题目: 分析: 补充知识 1. 同余定理: (a-b) % p 0即a-b能被p整除, > a % p b % p 2. c, java中 [负数 % 正数] 的结果是负数, 想要得到正确结果 > (a%pp)%p这道题和<和为k的子数组>类似, 利用前缀和的思想, 计算以i结尾的所有子数组, 前缀和为sum[i] …

炸裂!AI五分钟模仿爆款IP故事,涨粉速度太绝了!

‍ ‍大家好&#xff0c;我是向阳。 今天我要分享一个利用AI技术模仿爆款账号的小技巧&#xff0c;帮助大家迅速增加粉丝。这个方法简单实用&#xff0c;尤其适用于副业和本地生活领域。接下来&#xff0c;我将为大家详细讲解操作步骤。让我们开始吧。 副业赚钱&#xff1a;模…

QT 程序缺少API-开头文件

无法启动此程序&#xff0c;因为计算机中丢失api-ms-win-core-rtlsupport-11-2-0dl。尝试重新安装该程序以解决此问题 因为打包QT程序经常去到的别的电脑会缺少系统的MFC开头 msvcp 的库所以&#xff0c;QT自带的VC安装包体验不够好所以都是自己本地复制一套进行打包。。 有部…

LVDS与IDELAY

摘要&#xff1a;LVDS&#xff08;Low-Voltage Differential Signaling&#xff09;低电压差分信号&#xff0c;是一种低功耗、低误码率、低串扰和低辐射的差分信号技术&#xff1b;LVDS会被经常使用到&#xff0c;使用的过程中难免会碰到时序问题&#xff0c;需要借助IDELAY进…

在看代码的时候,vscode使用书签快速跳转到想看的代码

安装bookmarks 重启vscode之后&#xff0c;摁F1 搜搜索“书签”&#xff0c;更改自己需要的快捷键&#xff0c;我这里更改了三个

生命在于学习——Python人工智能原理(1.2)

一、人工智能的基本知识 6、新一代人工智能驱动因素 &#xff08;1&#xff09;数据量爆发性增长。 &#xff08;2&#xff09;计算能力大幅提升 &#xff08;3&#xff09;深度学习等算法发展 &#xff08;4&#xff09;移动AI创新应用牵引 7、人工智能关键技术 &#x…

降价!免费!AI大模型开启价格战,企业如何“薅”出绿色财富?

近期&#xff0c;国内大模型技术供应商之间的价格战&#xff0c;使得这项原本成本较高的技术变得更加亲民&#xff0c;极大降低了企业的技术采用门槛。这不仅为企业提供了经济实惠的技术解决方案&#xff0c;更为他们的绿色低碳转型之路带来了新的机遇。 随着全球气候变化问题…

认知觉醒:情绪绝对是财富的拦路虎……

认知觉醒 无论是投资还是做生意&#xff0c;跟随大众情绪就一定会亏损&#xff0c;老百姓没有是非认知&#xff0c;只有好恶&#xff0c;所以就很容易被人操控情绪。随便一个社会热点事件&#xff0c;就比如最近的涂磊事件、郭有才事件&#xff0c;打开视频的评论区&#xff0…

GaussDB数据库的备份与恢复

1.逻辑备份-gs_dump gs_dump是一款用于导出数据库相关信息的工具&#xff0c;支持导出完整一致的数据库对象&#xff08;数据库、模式、表、视图等&#xff09;数据&#xff0c;同时不影响用户对数据库的正常访问。 备份sql语句 gs_dump是openGauss用于导出数据库相关信息的工…

吴恩达2022机器学习专项课程C2W2:2.17 TensorFlow实现 2.18 训练细节

这里写目录标题 本周任务TensorFlow训练神经网络模型的简要过程训练模型的三个步骤1.自行训练逻辑回归模型2.TensorFlow训练神经网络模型 TensorFlow训练神经网络模型的代码含义1.定义模型2.指定损失函数和成本函数3.最小化成本函数 总结QuizQuiz1Quiz2 本周任务 神经网络如何…

ZeroTier+Nomachine远程

目录 前述&#xff1a;一、Zero二、Nomachine 前述&#xff1a; 需要远程控制时&#xff0c;服务端与客户端都必须下载这两个软件&#xff01;远程主机&#xff08;被控制的主机&#xff09;和远程客户端&#xff08;控制主机的用户&#xff09;都必须具有网络连接&#xff0c;…

代码随想录算法训练营第四十一天|动态规划理论基础、509. 斐波那契数列、70. 爬楼梯、746. 使用最小花费爬楼梯

动态规划理论基础 什么是动态规划 动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的&#xff0c;这一点就…

C语言常用字符串处理函数

C语言中包含了很多对字符串处理的函数,要使用这些函数&#xff0c; 首先需要导入头文件#include <string.h> 1. strlen() -- 计算字符串长度 原型: size_t strlen(char const *string); 例: char *str "abcde"; size_t len strlen(str); // 结果为…

《软件方法(下)》8.3.4.5和《设计模式》中用语的区别

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 8.3 建模步骤C-2 识别类的关系 8.3.4 识别关联关系 8.3.4.4 类关系再整理 有了前面的知识&#xff0c;我们需要再整理一下类的关系。用类图表示类的关系如图8-134。 图8-134 “类的…

c# 贪心算法(Greedy Algo)

贪婪是一种算法范式&#xff0c;它逐步构建解决方案&#xff0c;始终选择提供最明显和直接收益的下一个部分。贪婪算法用于解决优化问题。 如果问题具有以下属性&#xff0c;则可以使用贪心法解决优化问题&#xff1a; 每一步&#xff0c;我们都可以做出当前看来最好的选择&…

Spring Cloud Alibaba 架构-Sentinel熔断降级

Sentinel主要功能 Sentinel 是阿里巴巴开源的一款流量控制、熔断降级组件&#xff0c;它主要用于保护微服务系统。Sentinel 的主要功能包括以下几个方面&#xff1a; 1. 流量控制&#xff08;Flow Control&#xff09;&#xff1a; Sentinel 通过控制并发请求的数量或速率&am…

【Python】搭建pypi私仓

1. 下载依赖 pip install pypiserver # 命令安装 pypiserver 库 pip install passlib # passlib 包来读取 Apache htpasswd 文件apt-get install -y apache2-utils2. 生成密码 使用htpasswd库在指定路径/path/to/.pypipasswd生成密码文件 htpasswd -c /path/to/.pypipasswd …

Windows64位操作系统安装汇编语言环境

1、下载好MASM工具, 并存放在指定路径 2、再安装一个DOSBox 3、打开DOSBox, 并使用 mount 将刚刚存放MASM的路径挂在到C盘&#xff0c;然后进入C盘就可以使用 MASM的命令工具了。 例如&#xff1a; mount c G:\install\study\MASM C:但是DOSBox默认打开的窗口是很小的&…