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();
这将执行存储过程,插入随机生成的学生和成绩信息。