diff --git a/migrate_fix_signin_logs_fk.sql b/migrate_fix_signin_logs_fk.sql index 7df3841..c1ff64c 100644 --- a/migrate_fix_signin_logs_fk.sql +++ b/migrate_fix_signin_logs_fk.sql @@ -1,21 +1,10 @@ --- 修复 signin_logs 外键:删除账号时级联删除签到记录 +-- 修复 signin_logs 外键 -- 用法: mysql -u weibo -p123456 weibo_hotsign < migrate_fix_signin_logs_fk.sql --- 先查出旧外键名并删除,再重建 -SET @fk_name = ( - SELECT CONSTRAINT_NAME FROM information_schema.KEY_COLUMN_USAGE - WHERE TABLE_SCHEMA = 'weibo_hotsign' - AND TABLE_NAME = 'signin_logs' - AND COLUMN_NAME = 'account_id' - AND REFERENCED_TABLE_NAME = 'accounts' - LIMIT 1 -); - -SET @sql = CONCAT('ALTER TABLE signin_logs DROP FOREIGN KEY ', @fk_name); -PREPARE stmt FROM @sql; -EXECUTE stmt; -DEALLOCATE PREPARE stmt; +-- 1. 清理孤儿记录 +DELETE FROM signin_logs WHERE account_id NOT IN (SELECT id FROM accounts); +-- 2. 重建外键(带 CASCADE),忽略已存在的情况 ALTER TABLE signin_logs ADD CONSTRAINT fk_signin_logs_account FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE;