## 业务库清理说明 数据库:safety-eval-service 不清理的表: basic_discipline_major industry_professional_standards org_business_scope_device_ref ## 租户数据清理操作文档 ### 一、清理条件定义 执行前根据实际场景修改以下条件的值,并将修改后的值替换到下方所有 SQL 中。 | 条件 | 当前值 | 说明 | |------|--------|------| | 目标租户ID | `2067161116369793024` | 所有 SQL 中 `tenant_id =` 后面的值 | | 排除账号 | `'cqanquan','15100110011','jianguan001'` | 所有 SQL 中 `NOT IN (...)` 里的账号列表 | **修改方式**:在文档中全局替换。例如要清理另一个租户并调整排除账号,将所有 SQL 中的 `2067161116369793024` 替换为目标租户ID,将 `NOT IN ('cqanquan','15100110011','jianguan001')` 替换为实际的排除账号列表。 --- ### 二、操作原则 1. **主表即删除目标**:每条 SELECT 的主表就是要删除数据的表,SELECT 列出的每一行就是将被 DELETE 删除的行。 2. **先查询后删除**:每个步骤必须先执行 SELECT 确认影响范围,核对无误后再执行对应的 DELETE。 3. **关联逻辑一致**:SELECT 和 DELETE 使用完全相同的 FROM/JOIN/WHERE 结构,只将 SELECT 替换为 DELETE 主表别名。 4. **按依赖顺序清理**:先删关联表(子表),再删主表,避免数据不一致。 5. **单步执行**:每一步独立执行并确认结果,不要批量粘贴所有 SQL。 --- ### 三、清理步骤 #### 步骤 1:用户关联角色 - **执行库**:jjb-saas-system - **主表(删除目标)**:sys_role_user - **辅助表(过滤条件)**:sys_user **1.1 查询确认** ```sql SELECT ru.id, ru.user_id, ru.role_id FROM sys_role_user ru INNER JOIN sys_user u ON ru.user_id = u.id WHERE u.tenant_id = 2067161116369793024 AND u.account NOT IN ('cqanquan','15100110011','jianguan001'); ``` **1.2 执行删除** ```sql DELETE ru FROM sys_role_user ru INNER JOIN sys_user u ON ru.user_id = u.id WHERE u.tenant_id = 2067161116369793024 AND u.account NOT IN ('cqanquan','15100110011','jianguan001'); ``` --- #### 步骤 2:用户关联部门 - **执行库**:jjb-saas-system - **主表(删除目标)**:sys_user_role_dept - **辅助表(过滤条件)**:sys_user **2.1 查询确认** ```sql SELECT urd.id, urd.user_id, urd.role_id, urd.dept_id FROM sys_user_role_dept urd INNER JOIN sys_user u ON urd.user_id = u.id WHERE u.tenant_id = 2067161116369793024 AND u.account NOT IN ('cqanquan','15100110011','jianguan001'); ``` **2.2 执行删除** ```sql DELETE urd FROM sys_user_role_dept urd INNER JOIN sys_user u ON urd.user_id = u.id WHERE u.tenant_id = 2067161116369793024 AND u.account NOT IN ('cqanquan','15100110011','jianguan001'); ``` --- #### 步骤 3:角色关联权限组 - **执行库**:jjb-saas-system - **主表(删除目标)**:sys_role_perms_group - **辅助表(过滤条件)**:sys_role_user → sys_user **3.1 查询确认** ```sql SELECT rpg.id, rpg.role_id, rpg.group_id FROM sys_role_perms_group rpg INNER JOIN sys_role_user ru ON rpg.role_id = ru.role_id INNER JOIN sys_user u ON ru.user_id = u.id WHERE u.tenant_id = 2067161116369793024 AND u.account NOT IN ('cqanquan','15100110011','jianguan001'); ``` **3.2 执行删除** ```sql DELETE rpg FROM sys_role_perms_group rpg INNER JOIN sys_role_user ru ON rpg.role_id = ru.role_id INNER JOIN sys_user u ON ru.user_id = u.id WHERE u.tenant_id = 2067161116369793024 AND u.account NOT IN ('cqanquan','15100110011','jianguan001'); ``` --- #### 步骤 4:角色数据 - **执行库**:jjb-saas-system - **主表(删除目标)**:sys_role - **辅助表(过滤条件)**:sys_role_user → sys_user **4.1 查询确认** ```sql SELECT r.id, r.role_name, r.role_code FROM sys_role r INNER JOIN sys_role_user ru ON r.id = ru.role_id INNER JOIN sys_user u ON ru.user_id = u.id WHERE u.tenant_id = 2067161116369793024 AND u.account NOT IN ('cqanquan','15100110011','jianguan001'); ``` **4.2 执行删除** ```sql DELETE r FROM sys_role r INNER JOIN sys_role_user ru ON r.id = ru.role_id INNER JOIN sys_user u ON ru.user_id = u.id WHERE u.tenant_id = 2067161116369793024 AND u.account NOT IN ('cqanquan','15100110011','jianguan001'); ``` --- #### 步骤 5:用户数据 - **执行库**:jjb-saas-system - **主表(删除目标)**:sys_user - **辅助表**:无 **5.1 查询确认** ```sql SELECT id, account, name, mobile, email, status_enum, create_time FROM sys_user WHERE tenant_id = 2067161116369793024 AND account NOT IN ('cqanquan','15100110011','jianguan001'); ``` **5.2 执行删除** ```sql DELETE FROM sys_user WHERE tenant_id = 2067161116369793024 AND account NOT IN ('cqanquan','15100110011','jianguan001'); ``` --- #### 步骤 6:账号租户关联 - **执行库**:jjb-saas-auth - **主表(删除目标)**:auth_account_tenant_rel - **辅助表(过滤条件)**:auth_account **6.1 查询确认** ```sql SELECT atr.id, atr.account_id, atr.tenant_id FROM auth_account_tenant_rel atr INNER JOIN auth_account a ON atr.account_id = a.id WHERE atr.tenant_id = 2067161116369793024 AND a.username NOT IN ('cqanquan','15100110011','jianguan001'); ``` **6.2 执行删除** ```sql DELETE atr FROM auth_account_tenant_rel atr INNER JOIN auth_account a ON atr.account_id = a.id WHERE atr.tenant_id = 2067161116369793024 AND a.username NOT IN ('cqanquan','15100110011','jianguan001'); ``` --- #### 步骤 7:账号租户密码 - **执行库**:jjb-saas-auth - **主表(删除目标)**:auth_account_tenant_password - **辅助表(过滤条件)**:auth_account **7.1 查询确认** ```sql SELECT atp.id, atp.account_id, a.username, atp.user_type_enum, atp.status_enum FROM auth_account_tenant_password atp INNER JOIN auth_account a ON atp.account_id = a.id WHERE atp.tenant_id = 2067161116369793024 AND a.username NOT IN ('cqanquan','15100110011','jianguan001'); ``` **7.2 执行删除** ```sql DELETE atp FROM auth_account_tenant_password atp INNER JOIN auth_account a ON atp.account_id = a.id WHERE atp.tenant_id = 2067161116369793024 AND a.username NOT IN ('cqanquan','15100110011','jianguan001'); ``` --- #### 步骤 8:账号数据 - **执行库**:jjb-saas-auth - **主表(删除目标)**:auth_account - **辅助表**:无 **8.1 查询确认** ```sql SELECT id, username, mobile, name, status_enum, delete_enum FROM auth_account WHERE tenant_id = 2067161116369793024 AND username NOT IN ('cqanquan','15100110011','jianguan001'); ``` **8.2 执行删除** ```sql DELETE FROM auth_account WHERE tenant_id = 2067161116369793024 AND username NOT IN ('cqanquan','15100110011','jianguan001'); ``` --- ### 四、清理顺序总览 | 顺序 | 步骤 | 库 | 主表(删除目标) | 辅助表 | 说明 | |------|------|-----|-----------------|--------|------| | 1 | 用户关联角色 | jjb-saas-system | sys_role_user | sys_user | 解除用户与角色的绑定 | | 2 | 用户关联部门 | jjb-saas-system | sys_user_role_dept | sys_user | 解除用户与部门的绑定 | | 3 | 角色关联权限组 | jjb-saas-system | sys_role_perms_group | sys_role_user → sys_user | 解除角色与权限组的绑定 | | 4 | 角色数据 | jjb-saas-system | sys_role | sys_role_user → sys_user | 删除角色本身 | | 5 | 用户数据 | jjb-saas-system | sys_user | 无 | 删除用户记录 | | 6 | 账号租户关联 | jjb-saas-auth | auth_account_tenant_rel | auth_account | 解除账号与租户的绑定 | | 7 | 账号租户密码 | jjb-saas-auth | auth_account_tenant_password | auth_account | 删除租户级密码数据 | | 8 | 账号数据 | jjb-saas-auth | auth_account | 无 | 删除账号记录 | > **注意**:权限组(sys_perms_group)和菜单(sys_menu)属于租户级资源,不随用户删除而删除。如需清理权限组和菜单,需额外执行。