| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- -- S8-NOTIFICATION-LOG-INDEX-DDL-P2-3 — ROLLBACK
- -- Target table: ado_s8_notification_log
- -- Purpose: 回滚 20260531_s8_notification_log_indexes.sql 创建的 2 个二级索引。
- --
- -- 重要前置:
- -- 1. 如果 AdoS8NotificationLog.cs 实体上的 [SugarIndex] 注解仍然存在,
- -- 下一次 Database.json 的 TableSettings.EnableInitTable=true 启动时,
- -- CodeFirst 会按注解自动重建本脚本刚 DROP 的索引;
- -- 2. 因此回滚 DDL 时,必须同步执行以下任一动作:
- -- - 同步移除 AdoS8NotificationLog.cs 中对应的 [SugarIndex] 注解,或
- -- - 在回滚期间将 Database.json 中 TableSettings.EnableInitTable 改为 false,
- -- 否则回滚将被 CodeFirst 自动覆盖。
- -- 3. 本脚本仅 DROP 二级索引,不删除任何数据行,不改字段,不改表结构,
- -- 不触碰其他索引(PRIMARY 与未来新增索引不受影响)。
- -- 4. 不执行 DML(INSERT/UPDATE/DELETE)。
- -- 5. 不执行 DROP TABLE / TRUNCATE / ALTER COLUMN / MODIFY COLUMN。
- --
- -- Idempotency:
- -- MySQL 8 不支持 DROP INDEX IF EXISTS(仅 8.0.29+ 支持,且本环境未验证)。
- -- 如果索引已不存在,DROP 会抛 "Can't DROP ... ; check that column/key exists",
- -- 属安全错误,先跑 pre-check 可避免。
- -- =========================================================================
- -- Pre-check (run first; expect 1 row each when index present)
- -- =========================================================================
- -- Pre-check A: idx_s8_notif_channel_time
- SELECT COUNT(*) AS exists_channel_time
- FROM INFORMATION_SCHEMA.STATISTICS
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME = 'ado_s8_notification_log'
- AND INDEX_NAME = 'idx_s8_notif_channel_time';
- -- Pre-check B: idx_s8_notif_created_at
- SELECT COUNT(*) AS exists_created_at
- FROM INFORMATION_SCHEMA.STATISTICS
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME = 'ado_s8_notification_log'
- AND INDEX_NAME = 'idx_s8_notif_created_at';
- -- =========================================================================
- -- Index drop (run each only when its pre-check returned 1)
- -- =========================================================================
- -- Drop index A
- DROP INDEX idx_s8_notif_channel_time ON ado_s8_notification_log;
- -- Drop index B
- DROP INDEX idx_s8_notif_created_at ON ado_s8_notification_log;
- -- =========================================================================
- -- Post-check (run after drop; expect 0 rows total)
- -- =========================================================================
- SELECT INDEX_NAME, GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) AS cols
- FROM INFORMATION_SCHEMA.STATISTICS
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME = 'ado_s8_notification_log'
- AND INDEX_NAME IN (
- 'idx_s8_notif_channel_time',
- 'idx_s8_notif_created_at'
- )
- GROUP BY INDEX_NAME;
|