-- ========================================
-- 删除编号200以后的学生及其所有相关数据
-- ========================================
-- 账号：root
-- 密码：root
-- 数据库：study
-- ========================================

-- ========================================
-- 第1步：先查询要删除的学生（确认）
-- ========================================

-- 查询编号200以后的学生用户
SELECT 
    user_id,
    user_name,
    nick_name,
    user_type,
    create_time
FROM sys_user
WHERE user_id > 200
  AND user_type IN ('02', 'student')
ORDER BY user_id;

-- 统计数量
SELECT COUNT(*) AS will_delete_count
FROM sys_user
WHERE user_id > 200
  AND user_type IN ('02', 'student');

-- ========================================
-- 第2步：删除相关数据（按依赖顺序）
-- ========================================

-- 2.1 删除学习记录详情
DELETE FROM study_learning_detail
WHERE student_id > 200;

-- 2.2 删除学习记录
DELETE FROM study_learning_record
WHERE student_id > 200;

-- 2.3 删除课程分配
DELETE FROM study_course_assignment
WHERE student_id > 200;

-- 2.4 删除学生班级关联（重要：这是导致数量不一致的主要原因）
DELETE FROM study_student_class
WHERE student_id > 200;

-- 2.5 删除考试记录
DELETE FROM study_exam_record
WHERE student_id > 200;

-- 2.6 删除答题记录
DELETE FROM study_student_answer
WHERE student_id > 200;

-- 2.7 删除学生变更记录
DELETE FROM study_student_change_log
WHERE student_id > 200;

-- 2.8 删除语音评测记录（如果有）
DELETE FROM study_voice_evaluation
WHERE student_id > 200;

-- ========================================
-- 第3步：删除用户角色和岗位关联
-- ========================================

-- 3.1 删除用户角色关联
DELETE FROM sys_user_role
WHERE user_id > 200
  AND user_id IN (
    SELECT user_id FROM sys_user 
    WHERE user_type IN ('02', 'student')
  );

-- 3.2 删除用户岗位关联
DELETE FROM sys_user_post
WHERE user_id > 200
  AND user_id IN (
    SELECT user_id FROM sys_user 
    WHERE user_type IN ('02', 'student')
  );

-- ========================================
-- 第4步：最后删除用户表记录
-- ========================================

DELETE FROM sys_user
WHERE user_id > 200
  AND user_type IN ('02', 'student');

-- ========================================
-- 第5步：验证删除结果
-- ========================================

-- 验证1：确认编号200以后的学生已删除
SELECT COUNT(*) AS remaining_students_after_200
FROM sys_user
WHERE user_id > 200
  AND user_type IN ('02', 'student');
-- 应该返回 0

-- 验证2：查看剩余的学生数量
SELECT 
    '用户表学生数' AS type,
    COUNT(*) AS count
FROM sys_user
WHERE user_type IN ('02', 'student')
UNION ALL
SELECT 
    '班级学生数' AS type,
    COUNT(DISTINCT student_id) AS count
FROM study_student_class
UNION ALL
SELECT 
    '课程分配学生数' AS type,
    COUNT(DISTINCT student_id) AS count
FROM study_course_assignment;
-- 三个数字应该一致

-- 验证3：查看剩余学生的编号范围
SELECT 
    MIN(user_id) AS min_id,
    MAX(user_id) AS max_id,
    COUNT(*) AS total_count
FROM sys_user
WHERE user_type IN ('02', 'student');
-- max_id 应该 <= 200

-- 验证4：确认没有孤儿数据
SELECT 
    '孤儿班级关联' AS type,
    COUNT(*) AS count
FROM study_student_class sc
LEFT JOIN sys_user u ON sc.student_id = u.user_id
WHERE u.user_id IS NULL
UNION ALL
SELECT 
    '孤儿课程分配' AS type,
    COUNT(*) AS count
FROM study_course_assignment ca
LEFT JOIN sys_user u ON ca.student_id = u.user_id
WHERE u.user_id IS NULL
UNION ALL
SELECT 
    '孤儿学习记录' AS type,
    COUNT(*) AS count
FROM study_learning_record lr
LEFT JOIN sys_user u ON lr.student_id = u.user_id
WHERE u.user_id IS NULL;
-- 所有应该返回 0

-- ========================================
-- 完成！
-- ========================================
-- 删除成功后，用户管理、课程分配、班级管理的学生数量应该一致
-- ========================================
