xinli/删除今天导入用户SQL脚本.sql
2025-12-02 15:12:55 +08:00

254 lines
7.2 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ========================================
-- 删除今天导入的用户数据 SQL脚本
-- 创建时间: 2025-12-01
-- 警告: 执行前请务必备份数据库!
-- ========================================
-- ========================================
-- 第一步: 查询今天导入的用户(先确认数量)
-- ========================================
-- 1. 查看今天创建的用户档案数量
SELECT
COUNT(*) AS '今天创建的用户档案数',
MIN(create_time) AS '最早创建时间',
MAX(create_time) AS '最晚创建时间'
FROM psy_user_profile
WHERE DATE(create_time) = CURDATE();
-- 2. 查看今天创建的用户档案详情前10条检查是否是要删除的数据
SELECT
profile_id,
user_id,
info_number,
user_name,
prison_area,
create_time,
create_by
FROM psy_user_profile
WHERE DATE(create_time) = CURDATE()
ORDER BY create_time DESC
LIMIT 10;
-- 3. 查看今天创建的系统用户数量
SELECT
COUNT(*) AS '今天创建的系统用户数',
MIN(create_time) AS '最早创建时间',
MAX(create_time) AS '最晚创建时间'
FROM sys_user
WHERE DATE(create_time) = CURDATE()
AND user_id > 1; -- 排除管理员账户
-- ========================================
-- 第二步: 数据备份(强烈推荐!)
-- ========================================
-- 创建备份表
CREATE TABLE IF NOT EXISTS psy_user_profile_backup_20251201 AS
SELECT * FROM psy_user_profile
WHERE DATE(create_time) = CURDATE();
CREATE TABLE IF NOT EXISTS sys_user_backup_20251201 AS
SELECT * FROM sys_user
WHERE DATE(create_time) = CURDATE()
AND user_id > 1;
-- 验证备份
SELECT COUNT(*) AS '备份的用户档案数' FROM psy_user_profile_backup_20251201;
SELECT COUNT(*) AS '备份的系统用户数' FROM sys_user_backup_20251201;
-- ========================================
-- 第三步: 删除关联数据(外键关联)
-- ========================================
-- 3.1 删除今天创建用户的测评记录
-- 警告:这会删除这些用户的所有测评数据!
DELETE FROM psy_assessment_answer
WHERE assessment_id IN (
SELECT a.assessment_id
FROM psy_assessment a
INNER JOIN psy_user_profile p ON a.target_user_id = p.user_id
WHERE DATE(p.create_time) = CURDATE()
);
DELETE FROM psy_factor_score
WHERE assessment_id IN (
SELECT a.assessment_id
FROM psy_assessment a
INNER JOIN psy_user_profile p ON a.target_user_id = p.user_id
WHERE DATE(p.create_time) = CURDATE()
);
DELETE FROM psy_assessment_warning
WHERE assessment_id IN (
SELECT a.assessment_id
FROM psy_assessment a
INNER JOIN psy_user_profile p ON a.target_user_id = p.user_id
WHERE DATE(p.create_time) = CURDATE()
);
DELETE FROM psy_assessment_report
WHERE assessment_id IN (
SELECT a.assessment_id
FROM psy_assessment a
INNER JOIN psy_user_profile p ON a.target_user_id = p.user_id
WHERE DATE(p.create_time) = CURDATE()
);
DELETE FROM psy_assessment
WHERE target_user_id IN (
SELECT user_id FROM psy_user_profile
WHERE DATE(create_time) = CURDATE()
);
-- 3.2 删除量表权限
DELETE FROM psy_scale_permission
WHERE user_id IN (
SELECT user_id FROM psy_user_profile
WHERE DATE(create_time) = CURDATE()
);
-- 3.3 删除问卷答题记录
DELETE FROM psy_questionnaire_answer_detail
WHERE answer_id IN (
SELECT qa.answer_id
FROM psy_questionnaire_answer qa
INNER JOIN psy_user_profile p ON qa.user_id = p.user_id
WHERE DATE(p.create_time) = CURDATE()
);
DELETE FROM psy_questionnaire_answer
WHERE user_id IN (
SELECT user_id FROM psy_user_profile
WHERE DATE(create_time) = CURDATE()
);
-- 3.4 删除用户角色关联
DELETE FROM sys_user_role
WHERE user_id IN (
SELECT user_id FROM psy_user_profile
WHERE DATE(create_time) = CURDATE()
);
-- 3.5 删除用户岗位关联
DELETE FROM sys_user_post
WHERE user_id IN (
SELECT user_id FROM psy_user_profile
WHERE DATE(create_time) = CURDATE()
);
-- ========================================
-- 第四步: 删除用户档案和系统用户
-- ========================================
-- 4.1 删除用户档案
DELETE FROM psy_user_profile
WHERE DATE(create_time) = CURDATE();
-- 4.2 删除系统用户对应的sys_user表
DELETE FROM sys_user
WHERE user_id IN (
SELECT user_id FROM psy_user_profile_backup_20251201
)
AND user_id > 1; -- 保护管理员账户
-- ========================================
-- 第五步: 验证删除结果
-- ========================================
-- 验证今天创建的用户是否已删除
SELECT COUNT(*) AS '剩余今天创建的用户档案数'
FROM psy_user_profile
WHERE DATE(create_time) = CURDATE();
SELECT COUNT(*) AS '剩余今天创建的系统用户数'
FROM sys_user
WHERE DATE(create_time) = CURDATE()
AND user_id > 1;
-- 查看备份表中的数据(确认备份成功)
SELECT COUNT(*) AS '备份的记录数' FROM psy_user_profile_backup_20251201;
SELECT * FROM psy_user_profile_backup_20251201 LIMIT 5;
-- ========================================
-- 恢复数据脚本(如果需要回滚)
-- ========================================
/*
-- 恢复用户档案
INSERT INTO psy_user_profile
SELECT * FROM psy_user_profile_backup_20251201;
-- 恢复系统用户
INSERT INTO sys_user
SELECT * FROM sys_user_backup_20251201;
-- 注意:恢复后需要手动恢复关联数据,建议在删除前做完整数据库备份!
*/
-- ========================================
-- 清理备份表(确认数据无误后可执行)
-- ========================================
/*
DROP TABLE IF EXISTS psy_user_profile_backup_20251201;
DROP TABLE IF EXISTS sys_user_backup_20251201;
*/
-- ========================================
-- 执行说明
-- ========================================
/*
执行顺序:
1. 先执行"第一步"的查询,确认是否是要删除的数据
2. 执行"第二步"创建备份(必须!)
3. 验证备份数据
4. 执行"第三步"删除关联数据
5. 执行"第四步"删除主表数据
6. 执行"第五步"验证删除结果
7. 如果出错,使用恢复脚本回滚
注意事项:
1. 务必在测试环境先执行一遍
2. 生产环境执行前做完整数据库备份
3. 建议在业务低峰期执行
4. 执行前通知相关人员
5. 保留备份表至少7天
6. 如果有其他关联表,需要补充删除语句
*/
-- ========================================
-- 更安全的分步执行方案
-- ========================================
/*
-- 方案A只删除特定时间段的用户更精确
-- 例如删除今天上午10点到11点导入的用户
SELECT COUNT(*) FROM psy_user_profile
WHERE create_time >= '2025-12-01 10:00:00'
AND create_time < '2025-12-01 11:00:00';
-- 然后修改上面的WHERE条件为
-- WHERE create_time >= '2025-12-01 10:00:00' AND create_time < '2025-12-01 11:00:00'
*/
/*
-- 方案B只删除特定创建人导入的用户更精确
SELECT COUNT(*) FROM psy_user_profile
WHERE DATE(create_time) = CURDATE()
AND create_by = 'admin'; -- 替换为实际的创建人用户名
-- 然后在WHERE条件中增加
-- AND create_by = 'admin'
*/
/*
-- 方案C根据信息编号范围删除如果有规律
SELECT COUNT(*) FROM psy_user_profile
WHERE info_number LIKE 'XXX%'; -- 替换为实际的编号前缀
-- 然后修改WHERE条件
*/