数据库表创建-设备
版本归属
用于 v5 设备与离线同步版。
表清单
user_devices
user_devices
用户设备表。用于记录当前用户上报的设备 JSON 数据和最近活跃时间。
执行 SQL
sql
CREATE TABLE IF NOT EXISTS user_devices (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
data JSON NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_user_devices_user (user_id)
);字段说明:
id:设备记录 IDuser_id:所属用户 IDdata:客户端上报的设备 JSON 数据,服务端不限制内部字段created_at:创建时间updated_at:更新时间,也作为最近在线或设备上报时间
索引说明:
uk_user_devices_user:保证同一用户只有一条设备上报记录,重复上报时更新已有记录
业务约束:
- 用户只能新增、查询、删除自己的设备记录
POST /api/devices请求体必须包含user_id和data- 请求体
user_id必须等于当前登录 token 对应的用户 ID data只要求是合法 JSON,内部字段不做限制- WebSocket 活跃、设备上报或客户端重新上线时可以更新
updated_at
建表后检查
sql
DESC user_devices;
SHOW INDEX FROM user_devices;最小验证
以下 SQL 假设 users 表中已经存在 id = 1 的用户。
上报设备:
sql
INSERT INTO user_devices (user_id, data)
VALUES (1, JSON_OBJECT('platform', 'web', 'device_id', 'web-001'));重复上报时更新:
sql
INSERT INTO user_devices (user_id, data)
VALUES (1, JSON_OBJECT('platform', 'web', 'version', '1.0.1'))
ON DUPLICATE KEY UPDATE
data = VALUES(data);查询用户设备:
sql
SELECT user_id, data, updated_at
FROM user_devices
WHERE user_id = 1
ORDER BY updated_at DESC;代码落地点
models/device_model.go定义UserDevice- 上报设备使用
user_id做 upsert - WebSocket 建连或心跳时可以更新
updated_at - 删除设备只允许删除当前登录用户自己的记录