-- 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;