MYSQL DDL语句【游标查询】

schooldb库——utf8字符集——utf8_general_ci排序规则

先创建库,再去使用下列的DDL语句。

DDL

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',
  `createDate` datetime DEFAULT NULL COMMENT '创建时间',
  `modifyDate` datetime DEFAULT NULL COMMENT '修改时间',
  `userName` varchar(30) NOT NULL COMMENT '学生名称',
  `pwd` varchar(36) DEFAULT NULL COMMENT '密码',
  `phone` varchar(11) DEFAULT NULL COMMENT '手机号',
  `age` tinyint(3) unsigned DEFAULT NULL COMMENT '年龄',
  `sex` char(2) DEFAULT '男' COMMENT '性别',
  `className` varchar(20) DEFAULT NULL,
  `addRess` varchar(255) DEFAULT NULL COMMENT '地址',
  `introduce` varchar(255) DEFAULT NULL COMMENT '简介',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DML

INSERT INTO `student` VALUES ('1', '2023-09-16 09:22:22', '2024-04-15 10:12:12', '张三', '123456', '15612345678', '19', '男', '信息1班', '石家庄', '一首张三的歌送给大家');
INSERT INTO `student` VALUES ('2', '2023-09-17 09:22:22', '2024-04-15 08:11:12', '李四', '123156', '15612345178', '19', '女', '信息1班', '石家庄', '一曲美丽的舞蹈送给大家');
INSERT INTO `student` VALUES ('3', '2023-09-18 09:23:22', '2024-04-15 11:12:12', '王五', '123256', '15612345278', '20', '男', '信息2班', '沈阳', '大刀王五也是英雄');
INSERT INTO `student` VALUES ('4', '2023-09-19 09:24:22', '2024-04-15 12:13:12', '赵六', '123356', '15612345378', '18', '男', '信息1班', '甘肃', '六六大顺');
INSERT INTO `student` VALUES ('5', '2023-09-10 09:25:22', '2024-04-15 13:14:12', '阮小七', '143456', '15612345678', '19', '男', '信息2班', '石家庄', '阮氏三雄,小七最霸气');
INSERT INTO `student` VALUES ('6', '2023-09-21 09:26:22', '2024-04-15 14:15:12', '朱重八', '153456', '15612355678', '18', '男', '信息2班', '浙江', '开局一个碗。');
INSERT INTO `student` VALUES ('7', '2023-09-22 09:27:22', '2024-04-15 15:16:12', '苏老九', '163456', '15612365678', '20', '男', '信息2班', '石家庄', '武状元');
INSERT INTO `student` VALUES ('8', '2023-09-23 09:28:22', '2024-04-15 16:17:12', '王石', '123476', '15612345778', '22', '男', '信息1班', '徐蚌', '钻石王老五');
INSERT INTO `student` VALUES ('9', '2023-09-24 19:29:22', '2024-04-15 17:18:12', '萧十一', '128456', '15612385678', '21', '男', '信息1班', '石家庄', '帅气逼人,英雄也。');
INSERT INTO `student` VALUES ('10', '2023-09-25 09:20:22', '2024-04-15 18:19:12', '宫十二', '129456', '15612395678', '22', '女', '信息1班', '杭州', '十二条舔狗和一位绿茶的故事');

为了创建一个存储过程来插入随机的学生信息和对应的成绩信息,我们首先需要确定如何生成这些随机数据。这里我会提供一些基本的示例,你可以根据自己的需求进行调整。

首先,我们假设userName是一个随机的字符串,phone是一个随机生成的电话号码,age是一个18到30之间的随机整数,sex是随机选择的“男”或“女”,createDate是一个最近日期范围内的随机日期,introduce是一个随机的简短文本描述。

对于score表,我们假设scoreName是一个随机的科目名称,result是一个0到100之间的随机分数。

DELIMITER //
CREATE PROCEDURE InsertRandomStudentAndScoreData()
BEGIN
    DECLARE i INT DEFAULT 0;
    DECLARE student_id INT;
    DECLARE random_string VARCHAR(255);
    DECLARE random_phone VARCHAR(20);
    DECLARE random_age INT;
    DECLARE random_sex VARCHAR(10);
    DECLARE random_date DATE;
    DECLARE random_introduce TEXT;
    DECLARE random_score_name VARCHAR(50);
    DECLARE random_result FLOAT;

    -- 插入10条随机学生信息
    WHILE i < 10 DO
        SET random_string = CONCAT(SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', FLOOR(RAND() * 52) + 1, 1), 
                                   SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', FLOOR(RAND() * 52) + 1, 1),
                                   '_', FLOOR(RAND() * 1000));
        SET random_phone = CONCAT('1', FLOOR(RAND() * 9) + 1, FLOOR(RAND() * 100000000));
        SET random_age = FLOOR(18 + (RAND() * 13));
        SET random_sex = IF(RAND() > 0.5, '男', '女');
        SET random_date = CURDATE() - INTERVAL FLOOR(RAND() * 365) DAY;
        SET random_introduce = CONCAT('来自', SUBSTRING('东西南北中', FLOOR(RAND() * 5) + 1, 1), '方,喜欢', SUBSTRING('阅读音乐编程旅行', FLOOR(RAND() * 4) + 1, 1), '。');

        INSERT INTO student (createDate, userName, phone, age, sex, introduce) 
        VALUES (random_date, random_string, random_phone, random_age, random_sex, random_introduce);

        -- 获取最后插入的学生的ID
        SELECT LAST_INSERT_ID() INTO student_id;

        -- 为这个学生插入10条随机成绩信息
        SET i_inner = 0;
        WHILE i_inner < 10 DO
            SET random_score_name = CONCAT('科目', FLOOR(RAND() * 10) + 1);
            SET random_result = FLOOR(RAND() * 100) + 1;

            INSERT INTO score (scoreName, result, studentId) 
            VALUES (random_score_name, random_result, student_id);

            SET i_inner = i_inner + 1;
        END WHILE;

        SET i = i + 1;
    END WHILE;
END //
DELIMITER ;

在上面的存储过程中,我们使用了两个嵌套的WHILE循环。外部循环用于插入10个学生,内部循环用于为每个新插入的学生插入10条成绩记录。RAND()函数用于生成随机数,LAST_INSERT_ID()函数用于获取最后插入的学生的ID。

请注意,上述代码中的随机字符串、电话号码、科目名称等生成方式可能不符合实际的数据要求,你需要根据实际需要修改这些生成逻辑。同样,成绩的分数范围、学生的年龄范围等也可能需要根据实际情况进行调整。

另外,上述代码假设student表的自增ID从1开始,并且没有设置自增的起始值。如果你希望从ID为6开始,你需要在创建表时设置自增的起始值,或者在插入前手动设置AUTO_INCREMENT的值。但是,手动设置AUTO_INCREMENT的值通常不是一个好的做法,因为它可能影响到并发插入操作。更好的做法是在插入前预先插入一些占位数据,使自增ID达到期望的起始值。

最后,运行存储过程:

CALL InsertRandomStudentAndScoreData();

这将执行存储过程,插入随机生成的学生和成绩信息。

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值