MySQL 的 ALTER TABLE ADD COLUMN 语法不支持 IF NOT EXISTS。
ALTER TABLE table_name
ADD COLUMN IF NOT EXISTS tenant_id BIGINT NULL;
-- 使用动态 SQL 检查字段是否存在
SET @sql = (SELECT IF(
COUNT(*) = 0,
'ALTER TABLE table_name ADD COLUMN tenant_id BIGINT NULL',
'SELECT ''字段已存在'' AS info'
) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'database_name'
AND TABLE_NAME = 'table_name'
AND COLUMN_NAME = 'tenant_id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
📄 新的迁移脚本: tools/sql/add_all_tenant_id_fields.sql
IF NOT EXISTS(ALTER TABLE 不支持)IF NOT EXISTS(MySQL 8.0 支持)aidopdev 数据库d:\DEMONET\tools\sql\add_all_tenant_id_fields.sqlmysql -u root -p
# 输入密码后:
USE aidopdev;
source d:/DEMONET/tools/sql/add_all_tenant_id_fields.sql
mysql -u root -p aidopdev < d:\DEMONET\tools\sql\add_all_tenant_id_fields.sql
脚本执行过程中会显示:
执行完成后,手动验证:
-- 查看有多少表添加了 tenant_id
SELECT COUNT(DISTINCT TABLE_NAME) AS 表数量
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'aidopdev'
AND COLUMN_NAME = 'tenant_id';
-- 查看具体哪些表有 tenant_id
SELECT TABLE_NAME AS 表名
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'aidopdev'
AND COLUMN_NAME = 'tenant_id'
ORDER BY TABLE_NAME;
执行成功后应该看到约 24+ 张表 有 tenant_id 字段。
修正时间:2026-04-22
问题:MySQL ALTER TABLE 不支持 IF NOT EXISTS
解决方案:使用动态 SQL + PREPARE/EXECUTE