mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-09 04:49:02 +08:00
59 lines
3.0 KiB
SQL
59 lines
3.0 KiB
SQL
-- 适用:升级到独立社交身份表的既有 PIGX 数据库。
|
|
-- 执行前备份,并通过 mysql 的 --database 指定 pigxx 或 pigxx_boot;不要对业务库重跑初始化脚本。
|
|
-- 保留 sys_user 旧字段;仅迁移当前仍支持的平台。重复执行不会覆盖已经绑定的身份。
|
|
-- 若同一身份绑定多个用户,或用户已有不同身份,唯一索引将阻止迁移并回滚数据,请先核对冲突。
|
|
|
|
CREATE TABLE IF NOT EXISTS `sys_user_social` (
|
|
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
|
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
|
|
`type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '社交平台类型',
|
|
`identifier` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '唯一凭据',
|
|
`create_time` datetime NOT NULL COMMENT '创建时间',
|
|
PRIMARY KEY (`id`) USING BTREE,
|
|
UNIQUE KEY `uk_social_identifier` (`type`,`identifier`) USING BTREE,
|
|
UNIQUE KEY `uk_user_social_type` (`user_id`,`type`) USING BTREE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户社交登录身份表';
|
|
|
|
DROP PROCEDURE IF EXISTS pigx_migrate_user_social_20260922;
|
|
DELIMITER $$
|
|
CREATE PROCEDURE pigx_migrate_user_social_20260922()
|
|
BEGIN
|
|
DECLARE platform_index INT DEFAULT 0;
|
|
DECLARE legacy_column VARCHAR(32);
|
|
DECLARE platform_type VARCHAR(32);
|
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
|
BEGIN
|
|
ROLLBACK;
|
|
RESIGNAL;
|
|
END;
|
|
|
|
START TRANSACTION;
|
|
WHILE platform_index < 5 DO
|
|
SET legacy_column = ELT(platform_index + 1, 'wx_openid', 'mini_openid', 'qq_openid', 'wx_cp_userid', 'wx_ding_userid');
|
|
SET platform_type = ELT(platform_index + 1, 'WX', 'MINI', 'QQ', 'WEIXIN_CP', 'DINGTALK');
|
|
IF EXISTS (
|
|
SELECT 1 FROM information_schema.COLUMNS
|
|
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sys_user' AND COLUMN_NAME = legacy_column
|
|
) THEN
|
|
SET @pigx_social_migration_sql = CONCAT(
|
|
'INSERT INTO sys_user_social (id, user_id, type, identifier, create_time) ',
|
|
'SELECT UUID_SHORT(), u.user_id, ', QUOTE(platform_type), ', u.`', legacy_column, '`, NOW() ',
|
|
'FROM sys_user u WHERE u.`', legacy_column, '` IS NOT NULL ',
|
|
'AND TRIM(u.`', legacy_column, '`) <> ', QUOTE(''), ' ',
|
|
'AND NOT EXISTS (SELECT 1 FROM sys_user_social s WHERE s.user_id = u.user_id ',
|
|
'AND s.type = ', QUOTE(platform_type), ' AND BINARY s.identifier = BINARY u.`', legacy_column, '`)'
|
|
);
|
|
PREPARE pigx_social_migration_stmt FROM @pigx_social_migration_sql;
|
|
EXECUTE pigx_social_migration_stmt;
|
|
DEALLOCATE PREPARE pigx_social_migration_stmt;
|
|
END IF;
|
|
SET platform_index = platform_index + 1;
|
|
END WHILE;
|
|
COMMIT;
|
|
END$$
|
|
DELIMITER ;
|
|
|
|
CALL pigx_migrate_user_social_20260922();
|
|
DROP PROCEDURE pigx_migrate_user_social_20260922;
|
|
SET @pigx_social_migration_sql = NULL;
|