Skip to content

数据库表创建-人员 ​

版本归属 ​

用于 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,外部用户可保存头像 URL
  • auth_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 刷新用户状态

基于 MIT 许可发布