/* * ---------------------------------------------------------------- * 迁移脚本: 04_20260811_message_deletions.sql * 目的: * 新增 message_deletions 消息删除记录表,支持"删除仅对我生效"语义。 * 背景: 移动端聊天页的"删除"操作此前只把消息从本地数组移除, * 下次拉取历史消息时又会重新出现(假删除)。参照主流 IM 语义, * 删除应只影响操作者自己的可见性(撤回才影响双方),因此按 * (message_id, user_id) 记录删除关系,历史消息查询时排除。 * * 执行方式: * mysql -u root -p nl_im_plus < migrations/04_20260811_message_deletions.sql * * 回滚方式: * DROP TABLE IF EXISTS `message_deletions`; * ---------------------------------------------------------------- */ SET NAMES utf8mb4; -- 请按实际库名修改 USE `nl_im_plus`; CREATE TABLE IF NOT EXISTS `message_deletions` ( `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键', `message_id` bigint UNSIGNED NOT NULL COMMENT '被删除的消息ID', `user_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '执行删除的用户ID(删除仅对该用户生效)', `created_at` datetime(3) NULL DEFAULT NULL COMMENT '删除时间', PRIMARY KEY (`id`) USING BTREE, -- 唯一索引防止同一用户对同一消息重复插入删除记录 UNIQUE INDEX `uk_message_user`(`message_id` ASC, `user_id` ASC) USING BTREE, INDEX `idx_message_deletions_user_id`(`user_id` ASC) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '消息删除记录表,记录哪个用户删除了哪条消息(仅影响本人可见性)' ROW_FORMAT = Dynamic; -- 迁移完成 SELECT '20260811_message_deletions migration finished' AS status;