数据库表创建-人员
版本归属
用于 v1 用户体系基础版。
表清单
users
users
用户表。当前阶段支持本地注册登录,同时预留外部登录系统用户映射。
执行 SQL
sql
CREATE TABLE IF NOT EXISTS users (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
external_id VARCHAR(128) NULL,
username VARCHAR(64) NOT NULL,
password VARCHAR(255) NULL,
nickname VARCHAR(64) NOT NULL,
avatar_url LONGTEXT NULL,
auth_source ENUM('local', 'external') NOT NULL DEFAULT 'local',
status TINYINT NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_users_username (username),
UNIQUE KEY uk_users_external_id (external_id)
);字段说明:
external_id:外部登录系统中的用户 ID,本地用户可为空username:本地登录账号;外部用户接入后可使用外部账号名或生成稳定用户名password:本地用户明文密码;服务端不做加密或哈希,外部用户可为空nickname:IM 展示昵称,可本地设置或由外部系统同步avatar_url用户头像;本地注册用户保存头像 base64,外部用户可保存头像 URLauth_source:用户来源,local表示本地注册,external表示外部系统同步status:用户状态,第一版可用1表示正常,0表示禁用
索引说明:
uk_users_username:保证本地用户名唯一uk_users_external_id:保证外部用户 ID 唯一;MySQL 允许多条NULL
建表后检查:
sql
DESC users;
SHOW INDEX FROM users;最小验证:
注册接口会把密码原样写入 users.password,下面的 SQL 与接口注册后的存储格式一致:
sql
INSERT INTO users (username, password, nickname, auth_source, status)
VALUES ('alice', '123456', 'Alice', 'local', 1);
SELECT id, username, nickname, auth_source, status
FROM users
WHERE username = 'alice';代码落地点:
models/user_model.go的User结构必须和字段名保持一致- 注册接口写入
users - 登录接口按
username查询用户 - JWT 鉴权后按
id刷新用户状态