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