From 31d862dfa0055a5c76116684eb8ad1a72aa07a4c Mon Sep 17 00:00:00 2001 From: Jeason <1710884619@qq.com> Date: Wed, 1 Apr 2026 15:13:37 +0800 Subject: [PATCH] =?UTF-8?q?SQL=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- migrate_fix_signin_logs_fk.sql | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) 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;