CREATE TABLE alembic_version ( version_num VARCHAR(32) NOT NULL, CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num) ); -- Running upgrade -> 6165691326d4 CREATE TABLE permissions ( id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT, perm_code VARCHAR(128) NOT NULL COMMENT '权限编码,如 system:user:create', perm_name VARCHAR(64) NOT NULL COMMENT '权限名称', perm_type TINYINT NOT NULL COMMENT '类型:1菜单 2按钮 3接口' DEFAULT '1', parent_id BIGINT UNSIGNED COMMENT '父权限ID(permissions.id),顶级为空', sort_order INTEGER NOT NULL COMMENT '显示排序' DEFAULT '0', status TINYINT NOT NULL COMMENT '状态:1启用 0禁用' DEFAULT '1', create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP, update_time DATETIME NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, CONSTRAINT pk_permissions PRIMARY KEY (id), CONSTRAINT fk_permissions_parent_id FOREIGN KEY(parent_id) REFERENCES permissions (id) ON DELETE CASCADE, CONSTRAINT uk_permissions_perm_code UNIQUE (perm_code) )CHARSET=utf8mb4 ENGINE=InnoDB COMMENT='权限表' COLLATE utf8mb4_general_ci; CREATE TABLE roles ( id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT, role_code VARCHAR(32) NOT NULL COMMENT '角色编码:admin系统管理员 user普通用户', role_name VARCHAR(64) NOT NULL COMMENT '角色名称', description VARCHAR(255) COMMENT '角色说明', sort_order INTEGER NOT NULL COMMENT '显示排序' DEFAULT '0', status TINYINT NOT NULL COMMENT '状态:1启用 0禁用' DEFAULT '1', create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP, update_time DATETIME NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, CONSTRAINT pk_roles PRIMARY KEY (id), CONSTRAINT uk_roles_role_code UNIQUE (role_code) )CHARSET=utf8mb4 ENGINE=InnoDB COMMENT='角色表' COLLATE utf8mb4_general_ci; CREATE TABLE users ( id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT, username VARCHAR(64) NOT NULL COMMENT '登录用户名', password VARCHAR(100) NOT NULL COMMENT '密码哈希(BCrypt,固定60字符)', real_name VARCHAR(64) COMMENT '真实姓名', phone VARCHAR(20) COMMENT '手机号', email VARCHAR(128) COMMENT '邮箱', status TINYINT NOT NULL COMMENT '状态:1启用 0禁用' DEFAULT '1', token_version INTEGER NOT NULL COMMENT '令牌版本号:改密/禁用/强制下线时+1,使已签发Token立即失效' DEFAULT '1', last_login_time DATETIME COMMENT '最后登录时间', remark VARCHAR(255) COMMENT '备注', create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP, update_time DATETIME NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, CONSTRAINT pk_users PRIMARY KEY (id), CONSTRAINT uk_users_username UNIQUE (username) )CHARSET=utf8mb4 ENGINE=InnoDB COMMENT='系统用户表' COLLATE utf8mb4_general_ci; CREATE INDEX idx_users_phone ON users (phone); CREATE TABLE login_logs ( id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT, user_id BIGINT UNSIGNED COMMENT '用户ID(账号不存在时为空)', username VARCHAR(64) NOT NULL COMMENT '登录用户名(原样记录)', ip VARCHAR(45) COMMENT '客户端IP(45位兼容IPv6)', user_agent VARCHAR(255) COMMENT '客户端User-Agent(截断存储)', success TINYINT NOT NULL COMMENT '是否成功:1成功 0失败' DEFAULT '0', fail_reason VARCHAR(64) COMMENT '失败原因:验证码错误/用户名或密码错误/账号锁定/账号禁用', create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP, CONSTRAINT pk_login_logs PRIMARY KEY (id), CONSTRAINT fk_login_logs_user_id FOREIGN KEY(user_id) REFERENCES users (id) ON DELETE SET NULL )CHARSET=utf8mb4 ENGINE=InnoDB COMMENT='登录日志表' COLLATE utf8mb4_general_ci; CREATE INDEX idx_login_logs_create_time ON login_logs (create_time); CREATE INDEX idx_login_logs_username ON login_logs (username); CREATE TABLE role_permissions ( id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT, role_id BIGINT UNSIGNED NOT NULL COMMENT '角色ID(roles.id)', permission_id BIGINT UNSIGNED NOT NULL COMMENT '权限ID(permissions.id)', create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP, CONSTRAINT pk_role_permissions PRIMARY KEY (id), CONSTRAINT fk_role_permissions_permission_id FOREIGN KEY(permission_id) REFERENCES permissions (id) ON DELETE CASCADE, CONSTRAINT fk_role_permissions_role_id FOREIGN KEY(role_id) REFERENCES roles (id) ON DELETE CASCADE, CONSTRAINT uk_role_permissions_role_id_permission_id UNIQUE (role_id, permission_id) )CHARSET=utf8mb4 ENGINE=InnoDB COMMENT='角色权限关联表' COLLATE utf8mb4_general_ci; CREATE INDEX idx_role_permissions_permission_id ON role_permissions (permission_id); CREATE TABLE user_roles ( id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT, user_id BIGINT UNSIGNED NOT NULL COMMENT '用户ID(users.id)', role_id BIGINT UNSIGNED NOT NULL COMMENT '角色ID(roles.id)', create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP, CONSTRAINT pk_user_roles PRIMARY KEY (id), CONSTRAINT fk_user_roles_role_id FOREIGN KEY(role_id) REFERENCES roles (id) ON DELETE CASCADE, CONSTRAINT fk_user_roles_user_id FOREIGN KEY(user_id) REFERENCES users (id) ON DELETE CASCADE, CONSTRAINT uk_user_roles_user_id_role_id UNIQUE (user_id, role_id) )CHARSET=utf8mb4 ENGINE=InnoDB COMMENT='用户角色关联表' COLLATE utf8mb4_general_ci; CREATE INDEX idx_user_roles_role_id ON user_roles (role_id); INSERT INTO roles (role_code, role_name, description, sort_order) VALUES ('admin', '系统管理员', '全部权限,含计提参数与系数表配置', 1); INSERT INTO roles (role_code, role_name, description, sort_order) VALUES ('user', '普通用户', '业务操作', 2); INSERT INTO alembic_version (version_num) VALUES ('6165691326d4');