-- ============================================================ -- app_user 表结构修复与字段扩展 -- 用途:支持手机号 + 微信小程序登录,补充常用用户字段 -- ============================================================ -- 通用 helper:列不存在时才添加 DROP PROCEDURE IF EXISTS add_app_user_column; DELIMITER $$ CREATE PROCEDURE add_app_user_column( IN col_name VARCHAR(64), IN col_def VARCHAR(256) ) BEGIN IF NOT EXISTS ( SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'app_user' AND COLUMN_NAME = col_name ) THEN SET @sql = CONCAT('ALTER TABLE app_user ADD COLUMN ', col_name, ' ', col_def); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; END IF; END$$ DELIMITER ; -- 1. 补充原缺失的 username 列(注册/认证需要) CALL add_app_user_column('username', 'VARCHAR(64) COMMENT ''用户名'' AFTER id'); -- 2. 补充 BaseEntity 审计/逻辑删除列(MyBatis-Plus 自动填充与逻辑删除依赖) CALL add_app_user_column('is_deleted', 'TINYINT NOT NULL DEFAULT 0 COMMENT ''逻辑删除(0-否 1-是)'' AFTER status'); CALL add_app_user_column('create_time', 'DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ''创建时间'' AFTER is_deleted'); CALL add_app_user_column('update_time', 'DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ''更新时间'' AFTER create_time'); CALL add_app_user_column('create_by', 'BIGINT DEFAULT NULL COMMENT ''创建人'' AFTER update_time'); CALL add_app_user_column('update_by', 'BIGINT DEFAULT NULL COMMENT ''更新人'' AFTER create_by'); -- 3. 微信小程序登录相关字段 CALL add_app_user_column('unionid', 'VARCHAR(64) DEFAULT NULL COMMENT ''微信unionid'' AFTER wechat_openid'); CALL add_app_user_column('session_key', 'VARCHAR(128) DEFAULT NULL COMMENT ''微信小程序session_key'' AFTER unionid'); CALL add_app_user_column('register_source', 'TINYINT DEFAULT 1 COMMENT ''注册来源(1-手机号 2-微信小程序)'' AFTER session_key'); -- 4. 常用用户字段 CALL add_app_user_column('birthday', 'DATE DEFAULT NULL COMMENT ''生日'' AFTER register_source'); CALL add_app_user_column('last_login_time', 'DATETIME DEFAULT NULL COMMENT ''最后登录时间'' AFTER birthday'); DROP PROCEDURE IF EXISTS add_app_user_column; -- 5. 删除多余的 user_id 列 -- 实体 ClientUser 主键为 BaseEntity.id(列名 id),代码中 userId 均由 "id AS userId" 映射而来, -- 表内遗留的 user_id 列(NOT NULL 无默认值)导致 INSERT 未写该列时报 "Field 'user_id' doesn't have a default value"。 -- 该列未被任何代码引用,直接删除以消除冗余。 SET @col_exists = ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'app_user' AND COLUMN_NAME = 'user_id' ); SET @sql = IF( @col_exists > 0, 'ALTER TABLE app_user DROP COLUMN user_id', 'SELECT 1' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- 6. 扩大 password 列,BCrypt 加密后固定 60 字符,原 VARCHAR(32) 会触发 Data too long ALTER TABLE app_user MODIFY COLUMN password VARCHAR(100) NOT NULL COMMENT '密码(加密)'; -- 7. 扩大 sys_log.error_msg,避免长异常信息被截断 ALTER TABLE sys_log MODIFY COLUMN error_msg VARCHAR(2000) COMMENT '错误信息';