254 lines
7.2 KiB
SQL
254 lines
7.2 KiB
SQL
-- ========================================
|
||
-- 删除今天导入的用户数据 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条件
|
||
*/
|