数据库迁移脚本尚未执行,需要手动执行 SQL 脚本来为所有业务表添加 tenant_id 字段。
mysql -u root -p
USE aidopdev;
source d:/DEMONET/tools/sql/add_all_tenant_id_fields.sql
或者使用完整路径:
\. d:/DEMONET/tools/sql/add_all_tenant_id_fields.sql
# 将以下命令中的 YOUR_PASSWORD 替换为实际的数据库密码
mysql -u root -pYOUR_PASSWORD aidopdev < d:\DEMONET\tools\sql\add_all_tenant_id_fields.sql
# 将以下命令中的 YOUR_PASSWORD 替换为实际的数据库密码
Get-Content "d:\DEMONET\tools\sql\add_all_tenant_id_fields.sql" | mysql --host=localhost --user=root --password=YOUR_PASSWORD --database=aidopdev
如果您使用 Navicat、HeidiSQL、DBeaver 等工具:
d:\DEMONET\tools\sql\add_all_tenant_id_fields.sql 文件aidopdev 数据库在 MySQL 客户端或管理工具中执行:
SELECT
TABLE_NAME AS 表名,
COLUMN_NAME AS 字段名
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'aidopdev'
AND COLUMN_NAME = 'tenant_id'
ORDER BY TABLE_NAME;
预期结果: 应该显示 24 行记录
SELECT
TABLE_NAME AS 表名,
INDEX_NAME AS 索引名
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'aidopdev'
AND COLUMN_NAME = 'tenant_id'
AND INDEX_NAME = 'idx_tenant_id'
ORDER BY TABLE_NAME;
预期结果: 应该显示 24 行记录
-- 检查 WorkOrdMaster 表
DESCRIBE WorkOrdMaster;
-- 或者
SHOW COLUMNS FROM WorkOrdMaster LIKE 'tenant_id';
执行成功后,您应该看到:
tenant_id 字段BIGINT NULL租户ID(多租户隔离)idx_tenant_id 索引ERROR 1146: Table 'aidopdev.WorkOrdMaster' doesn't exist
原因: 某些表可能还没有创建
解决方案:
IF NOT EXISTS 会自动跳过ERROR 1060: Duplicate column name 'tenant_id'
原因: 该表已经有 tenant_id 字段了
解决方案: 这是正常的,SQL 中使用了 IF NOT EXISTS,会自动跳过已存在的字段
ERROR 1142: ALTER command denied
原因: 当前用户没有 ALTER TABLE 权限
解决方案: 使用具有管理员权限的用户(如 root)执行
ERROR 1045: Access denied for user 'root'@'localhost'
原因: 数据库密码不正确
解决方案: 确认正确的数据库密码后重新执行
如果数据库中已有业务数据,执行迁移后,需要为现有记录设置租户ID:
-- 假设默认租户ID为 1,根据实际情况调整
USE aidopdev;
-- Order 模块
UPDATE ado_contract_review SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE ado_contract_review_flow SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE LinkagePlan SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE ProductDesign SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE ProductDesignBom SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE ProductDesignRouting SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE crm_seorder SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE crm_seorderentry SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE ShippingPlan SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE ShippingPlanDetail SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE AsnShipperMaster SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE AsnShipperDetail SET tenant_id = 1 WHERE tenant_id IS NULL;
-- WorkOrder 模块
UPDATE WorkOrdMaster SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE WorkOrdDetail SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE WorkOrdRouting SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE mes_morder SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE mes_moentry SET tenant_id = 1 WHERE tenant_id IS NULL;
-- Production 模块
UPDATE ScheduleExceptionMaster SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE PeriodSequenceDet SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE ScheduleResultOpMaster SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE ShopCalendarWorkCtr SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE QualityLineWorkDetail SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE HolidayMaster SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE ResourceOccupancyTime SET tenant_id = 1 WHERE tenant_id IS NULL;
💾 完整迁移脚本
d:\DEMONET\tools\sql\add_all_tenant_id_fields.sql
包含所有表的 tenant_id 字段添加、索引创建和验证查询
📖 租户改造报告
d:\DEMONET\tools\TENANT_MIGRATION_REPORT.md
详细的多租户改造记录
📋 新实体创建报告
d:\DEMONET\tools\NEW_ENTITIES_CREATION_REPORT.md
新增的 10 个实体类详细信息
执行完成后,应该看到终端输出:
✅ 所有业务表 tenant_id 字段添加完成!
共添加 24 张表的 tenant_id 字段
然后您就可以:
生成时间:2026-04-22
迁移表数:24张
字段名:tenant_id(统一小写下划线格式)