小项目——MySQL集训(学生成绩录入)

ddl语句

 
-- 创建学生信息表
CREATE TABLE `students` (
  `student_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学生ID',
  `name` varchar(50) NOT NULL COMMENT '学生姓名',
  `gender` enum('男','女') NOT NULL COMMENT '性别',
  `class` varchar(50) NOT NULL COMMENT '班级',
  `registration_date` date DEFAULT NULL COMMENT '注册日期',
  `config_id` int(11) NOT NULL COMMENT '系统配置表id',
  PRIMARY KEY (`student_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生信息表';
 
-- 创建科目表
CREATE TABLE subjects (
    subject_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '科目ID',
    subject_name VARCHAR(100) NOT NULL UNIQUE COMMENT '科目名称',
    teacher_name VARCHAR(100) COMMENT '教师姓名'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='科目信息表';
 
 
-- 创建成绩表
CREATE TABLE scores (
    score_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '成绩ID',
    student_id INT NOT NULL COMMENT '学生ID',
    subject_id INT NOT NULL COMMENT '科目ID',
    score DECIMAL(5, 2) NOT NULL COMMENT '成绩',
    exam_date DATE COMMENT '考试日期',
    FOREIGN KEY (student_id) REFERENCES students(student_id) ON DELETE CASCADE,
    FOREIGN KEY (subject_id) REFERENCES subjects(subject_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成绩表';
 
 
-- 创建成绩分析表(可选,用于存储分析结果)
CREATE TABLE score_analysis (
    analysis_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '分析ID',
    subject_id INT NOT NULL COMMENT '科目ID',
    avg_score DECIMAL(5, 2) NOT NULL COMMENT '平均分',
    max_score DECIMAL(5, 2) NOT NULL COMMENT '最高分',
    min_score DECIMAL(5, 2) NOT NULL COMMENT '最低分',
    analysis_date DATE COMMENT '分析日期',
    FOREIGN KEY (subject_id) REFERENCES subjects(subject_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成绩分析表';
 
 
-- 创建系统配置表(可选,用于存储系统相关配置信息)
CREATE TABLE system_config (
    config_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '配置ID',
    config_key VARCHAR(100) NOT NULL UNIQUE COMMENT '配置键',
    config_value VARCHAR(255) COMMENT '配置值',
    description TEXT COMMENT '配置描述'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';

 dml语句

INSERT INTO students (name, gender, class, registration_date) VALUES
('张三', '男', '一班', '2023-09-01'),
('李四', '女', '二班', '2023-09-02'),
('王五', '男', '三班', '2023-09-03'),
('赵六', '女', '四班', '2023-09-04'),
('孙七', '男', '五班', '2023-09-05');
INSERT INTO subjects (subject_name, teacher_name) VALUES
('数学', '张老师'),
('英语', '李老师'),
('物理', '王老师'),
('化学', '赵老师'),
('生物', '孙老师');
INSERT INTO scores (student_id, subject_id, score, exam_date) VALUES
(1, 1, 85.50, '2023-10-15'), -- 张三的数学成绩
(1, 2, 90.25, '2023-10-15'), -- 张三的英语成绩
(2, 1, 78.75, '2023-10-15'), -- 李四的数学成绩
(2, 2, 88.00, '2023-10-15'), -- 李四的英语成绩
(5, 5, 92.00, '2023-10-15'); -- 孙七的生物成绩
INSERT INTO score_analysis (subject_id, avg_score, max_score, min_score, analysis_date) VALUES
(1, 82.38, 90.50, 75.00, '2023-10-17'), -- 数学成绩分析
(2, 86.75, 92.00, 80.00, '2023-10-17'), -- 英语成绩分析
(5, 89.25, 95.00, 85.00, '2023-10-17'); -- 生物成绩分析
INSERT INTO system_config (config_key, config_value, description) VALUES
('school_name', '阳光中学', '学校名称'),
('admin_email', 'admin@example.com', '管理员电子邮箱'),
('exam_schedule_url', 'https://example.com/exam-schedule', '考试安排网址');

 效果图

 

 

 

 

 增删改查语句

一、增(插入数据)

二、删(删除数据)

三、改(更新数据)

改之前

 运用的MySQL语句为

UPDATE scores set score=95 where subject_id = 5;

 改完之后是

四、查(查询数据)

运用到的MySQL语句是

SELECT config_value from system_config;

 多表联合查询

所用到的MySQL语句是

select students.`name` , scores.score 
from students
JOIN scores on students.student_id = scores.student_id
where scores.student_id = 1;

 效果图

触发器

-- 触发器名称:after_user_insert
 
-- 触发时机:AFTER INSERT
DELIMITER $$  -- 更改默认的语句分隔符为$$,这样可以在触发器内部使用分号
CREATE TRIGGER after_user_insert  -- 创建一个名为after_user_insert的触发器
AFTER INSERT ON students  -- 触发器在students表发生INSERT操作之后触发
FOR EACH ROW  -- 触发器对每一行插入操作都执行一次
BEGIN  -- 触发器开始
    INSERT INTO scores (subject_id , score )  -- 在scores表中插入一行数据
    VALUES ( NEW.subject_id, 2) ; 
END;  -- 触发器结束
$$  -- 触发器定义结束,使用新的分隔符
DELIMITER ;  -- 将语句分隔符改回为分号

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值