From e56bf8c7035d8b405f84e55de422b1f2999c38a0 Mon Sep 17 00:00:00 2001 From: zhang1106 <849185023@qq.com> Date: Thu, 9 Apr 2026 15:48:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=95=B0=E6=8D=AE=E5=BA=93=E8=BF=81?= =?UTF-8?q?=E7=A7=BB):=20=E4=B8=BAMySQL=E6=B7=BB=E5=8A=A0=E5=A4=96?= =?UTF-8?q?=E9=94=AE=E7=BA=A6=E6=9D=9F=E7=A7=BB=E9=99=A4=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/scripts/migrate-all.js | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/backend/scripts/migrate-all.js b/backend/scripts/migrate-all.js index 9bb90c6..938d2c9 100644 --- a/backend/scripts/migrate-all.js +++ b/backend/scripts/migrate-all.js @@ -300,6 +300,7 @@ async function removeConsumableLogFK() { }); if (!fks || fks.length === 0) { + console.log('SQLite: 没有外键约束需要移除'); return; } @@ -346,6 +347,34 @@ async function removeConsumableLogFK() { await sequelize.query( `CREATE INDEX idx_logs_is_consumable_deleted ON consumable_logs(isConsumableDeleted)` ); + } else if (dialect === 'mysql') { + try { + const [fks] = await sequelize.query(` + SELECT CONSTRAINT_NAME + FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE + WHERE TABLE_NAME = 'consumable_logs' + AND TABLE_SCHEMA = DATABASE() + AND REFERENCED_TABLE_NAME IS NOT NULL + `); + + if (!fks || fks.length === 0) { + console.log('MySQL: 没有外键约束需要移除'); + return; + } + + console.log(`MySQL: 发现 ${fks.length} 个外键约束`); + + for (const fk of fks) { + try { + await sequelize.query(`ALTER TABLE consumable_logs DROP FOREIGN KEY \`${fk.CONSTRAINT_NAME}\``); + console.log(`MySQL: 已移除外键约束 ${fk.CONSTRAINT_NAME}`); + } catch (err) { + console.log(`MySQL: 移除外键 ${fk.CONSTRAINT_NAME} 失败:`, err.message); + } + } + } catch (err) { + console.log('MySQL: 检查外键约束失败:', err.message); + } } }