Files
Mycontent/scripts/remove-referred-by-field.sql

109 lines
3.4 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.

-- ============================================================
-- 删除 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. 部署后请测试绑定和佣金功能
-- ============================================================