161 lines
4.0 KiB
SQL
161 lines
4.0 KiB
SQL
-- ========================================
|
||
-- 删除编号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
|
||
|
||
-- ========================================
|
||
-- 完成!
|
||
-- ========================================
|
||
-- 删除成功后,用户管理、课程分配、班级管理的学生数量应该一致
|
||
-- ========================================
|