1、前言
myql
在实战使用过程中会遇到不同的场景,针对不同场景,使用方式需要整理记录,给以后遇到类似问题做参考使用。
2、根据当前查询的结果更新查询的某列值。

- 【场景描述】
“有一张用户表,表中存储用户信息包括手机号,现增加一列保存手机号对应的加密数据。由于增加加密字段时,数据库表已经存储大量用户数据,则需要初始化该字段的加密数据值,需要初始化的实现过程”。 - 【实现方式】
一是应用程序,查询出所有数据,在批量更新处理数据。二是数据库sql直接完成。 - 【实现语句】
这里借助dual
虚拟表实现
-- 初始化
update sys_user_info a SET a.encrypt_password=(select to_base64(AES_ENCRYPT(password, "ABA")) from DUAL);
-- 查询
SELECT (SELECT AES_DECRYPT(from_base64(encrypt_password), "MySQL-MOBILE-KEY") from DUAL) AS info, a.* FROM sys_user_info a
这里主要是对dual虚拟表的一种认识。实际上可以直接函数方式:
update sys_user_info SET encrypt_mobile=to_base64(AES_ENCRYPT(mobile, "MySQL-MOBILE-KEY"));
SELECT AES_DECRYPT(from_base64(encrypt_password), "MySQL-MOBILE-KEY") AS info, a.* FROM sys_user_info a
3、数据脱敏

【场景描述】
类似手机号,需要中间4位 ‘*’ 处理。如:“187****4567
”,姓名3个字的中间1位 ‘*’ 处理,2个字的后面1位 ‘*’处理。如: “李 *
, 张*研
”
【实现方式】
(1)insert(mobile, 4,4,'****')
:函数
(2) concat(left(mobile,3), '****', right(mobile,4))
:联接函数
(3)REPLACE(mobile, SUBSTR(mobile,4,4), '****')
:替换函数
【实现语句】
-- 更新手机号
update sys_user_info set mobile = insert(mobile,4,4,'****');
-- 更新用户名
update sys_user_info set real_name = replace(real_name,substr(real_name,2,1),'*');
网友评论