Files
youlai-boot/sql/app_user_fix.sql

73 lines
3.4 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================
-- 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 '错误信息';