109 lines
3.4 KiB
SQL
109 lines
3.4 KiB
SQL
-- ============================================================
|
||
-- 删除 users.referred_by 冗余字段
|
||
-- 优化绑定关系存储,只使用 referral_bindings 表
|
||
-- ============================================================
|
||
|
||
-- 使用数据库
|
||
USE soul_miniprogram;
|
||
|
||
-- ============================================================
|
||
-- 步骤1: 备份 referred_by 数据
|
||
-- ============================================================
|
||
DROP TABLE IF EXISTS users_referred_by_backup;
|
||
|
||
CREATE TABLE users_referred_by_backup AS
|
||
SELECT id, referred_by, created_at
|
||
FROM users
|
||
WHERE referred_by IS NOT NULL;
|
||
|
||
-- 查看备份统计
|
||
SELECT
|
||
COUNT(*) as '备份记录数',
|
||
COUNT(DISTINCT referred_by) as '唯一推荐人数'
|
||
FROM users_referred_by_backup;
|
||
|
||
-- ============================================================
|
||
-- 步骤2: 验证 referral_bindings 数据完整性
|
||
-- ============================================================
|
||
|
||
-- 检查绑定表统计
|
||
SELECT
|
||
COUNT(*) as '总绑定记录',
|
||
COUNT(DISTINCT referee_id) as '唯一被推荐人',
|
||
SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) as '当前活跃绑定'
|
||
FROM referral_bindings;
|
||
|
||
-- 检查数据一致性(找出在users中有referred_by但在bindings中没有记录的用户)
|
||
SELECT COUNT(*) as '不一致记录数' FROM users u
|
||
WHERE u.referred_by IS NOT NULL
|
||
AND NOT EXISTS (
|
||
SELECT 1 FROM referral_bindings rb
|
||
WHERE rb.referee_id = u.id
|
||
);
|
||
|
||
-- ============================================================
|
||
-- 步骤3: 删除 referred_by 索引
|
||
-- ============================================================
|
||
|
||
-- 检查索引是否存在
|
||
SELECT
|
||
INDEX_NAME,
|
||
COLUMN_NAME,
|
||
SEQ_IN_INDEX
|
||
FROM information_schema.statistics
|
||
WHERE table_schema = 'soul_miniprogram'
|
||
AND table_name = 'users'
|
||
AND index_name = 'idx_referred_by';
|
||
|
||
-- 删除索引(如果存在)
|
||
ALTER TABLE users DROP INDEX IF EXISTS idx_referred_by;
|
||
|
||
-- ============================================================
|
||
-- 步骤4: 删除 referred_by 字段
|
||
-- ============================================================
|
||
|
||
-- 检查字段是否存在
|
||
SELECT
|
||
COLUMN_NAME,
|
||
COLUMN_TYPE,
|
||
IS_NULLABLE
|
||
FROM information_schema.columns
|
||
WHERE table_schema = 'soul_miniprogram'
|
||
AND table_name = 'users'
|
||
AND column_name = 'referred_by';
|
||
|
||
-- 删除字段
|
||
ALTER TABLE users DROP COLUMN referred_by;
|
||
|
||
-- ============================================================
|
||
-- 步骤5: 验证删除结果
|
||
-- ============================================================
|
||
|
||
-- 验证字段已删除
|
||
SELECT COUNT(*) as '字段是否仍存在(应为0)'
|
||
FROM information_schema.columns
|
||
WHERE table_schema = 'soul_miniprogram'
|
||
AND table_name = 'users'
|
||
AND column_name = 'referred_by';
|
||
|
||
-- 验证备份表
|
||
SELECT COUNT(*) as '备份记录数' FROM users_referred_by_backup;
|
||
|
||
-- ============================================================
|
||
-- 完成!
|
||
-- ============================================================
|
||
|
||
-- 查看users表当前结构
|
||
SHOW COLUMNS FROM users;
|
||
|
||
-- 查看referral_bindings表当前结构
|
||
SHOW COLUMNS FROM referral_bindings;
|
||
|
||
-- ============================================================
|
||
-- 备注:
|
||
-- 1. 备份表 users_referred_by_backup 可保留一段时间
|
||
-- 2. 确认无误后,可执行: DROP TABLE users_referred_by_backup;
|
||
-- 3. 代码已修改为只使用 referral_bindings 表
|
||
-- 4. 部署后请测试绑定和佣金功能
|
||
-- ============================================================
|