Files
nl-im-service/migrations/04_20260811_message_deletions.sql
2026-08-24 15:29:53 +08:00

37 lines
1.8 KiB
SQL

/*
* ----------------------------------------------------------------
* 迁移脚本: 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;