-- Auth 单一登录标识增量:用户名或中国大陆手机号。 -- 可重复执行;手机号仅从 IAM 当前用户档案回填,无法确认的账号保持 NULL。 USE baiyue_auth; DROP PROCEDURE IF EXISTS auth_add_login_phone; DELIMITER $$ CREATE PROCEDURE auth_add_login_phone() BEGIN IF NOT EXISTS ( SELECT 1 FROM information_schema.columns WHERE table_schema = 'baiyue_auth' AND table_name = 'auth_account' AND column_name = 'phone') THEN ALTER TABLE auth_account ADD COLUMN phone VARCHAR(32) NULL COMMENT '全局唯一中国大陆登录手机号' AFTER username; END IF; END$$ DELIMITER ; CALL auth_add_login_phone(); DROP PROCEDURE auth_add_login_phone; DROP PROCEDURE IF EXISTS auth_backfill_login_phone; DELIMITER $$ CREATE PROCEDURE auth_backfill_login_phone() BEGIN UPDATE auth_account SET phone = NULL WHERE phone IS NOT NULL AND phone NOT REGEXP '^1[3-9][0-9]{9}$'; UPDATE auth_account account JOIN baiyue_iam.iam_user user ON user.auth_user_id = account.id AND user.deleted = 0 JOIN ( SELECT phone FROM baiyue_iam.iam_user WHERE deleted = 0 AND phone REGEXP '^1[3-9][0-9]{9}$' GROUP BY phone HAVING COUNT(DISTINCT auth_user_id) = 1 ) unique_phone ON unique_phone.phone = user.phone SET account.phone = user.phone WHERE account.phone IS NULL AND user.phone REGEXP '^1[3-9][0-9]{9}$'; IF NOT EXISTS ( SELECT 1 FROM information_schema.statistics WHERE table_schema = 'baiyue_auth' AND table_name = 'auth_account' AND index_name = 'uk_auth_account_phone') THEN ALTER TABLE auth_account ADD UNIQUE KEY uk_auth_account_phone (phone); END IF; END$$ DELIMITER ; CALL auth_backfill_login_phone(); DROP PROCEDURE auth_backfill_login_phone;