从正式环境倒库了人员数据到测试环境,需要把人员信息脱敏处理
示例:表test_user,english_name英文名,chinese_name中文名,full_name 全名{英文名(中文名)}例 peanut(花生)
SELECT english_name,chinese_name,full_name FROM test_user WHERE id=1669;处理要求: 1、中文名修改为姓某某,不展示中文全称名 2、英文名展示
代码如下(示例):
--据存脱敏储过程-gai-升级版 DELIMITER $$ DROP PROCEDURE IF EXISTS date_not_keenness $$ CREATE PROCEDURE date_not_keenness() BEGIN DECLARE v_id bigint(20);#定义ID DECLARE done INT; -- 定义游标 DECLARE rs_cursor CURSOR FOR SELECT id FROM test_user; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; OPEN rs_cursor; cursor_loop:LOOP FETCH rs_cursor INTO v_id; -- 取数据 IF done=1 THEN leave cursor_loop; END IF; -- 更新表 UPDATE test_user SET chinese_name=RPAD(SUBSTRING(chinese_name, 1, 1),3,"某某") WHERE id=v_id; END LOOP cursor_loop; CLOSE rs_cursor; END$$ DELIMITER ; --调用存储过程 CALL date_not_keenness; --英文名和中文名合并成全名 DELIMITER $$ DROP PROCEDURE IF EXISTS coalition_name_not_keenness $$ CREATE PROCEDURE coalition_name_not_keenness() BEGIN DECLARE v_id bigint(20);#定义ID DECLARE done INT; -- 定义游标 DECLARE rs_cursor CURSOR FOR SELECT id FROM test_user; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; OPEN rs_cursor; cursor_loop:LOOP FETCH rs_cursor INTO v_id; -- 取数据 IF done=1 THEN leave cursor_loop; END IF; -- 更新表 UPDATE test_user SET full_name=CONCAT(english_name,'(',chinese_name,')') WHERE id=v_id; END LOOP cursor_loop; CLOSE rs_cursor; END$$ DELIMITER ; --调用存储过程 CALL coalition_name_not_keenness;使用的MySQL知识点:
字符截取 SUBSTRING 字符替换和补充 RPAD 练习了简单的过程