MySQL 更新 source_id 为 create_time*1000000+6位随机整数
学习笔记作者:admin日期:2025-07-22点击:29
摘要:编写一条 MySQL UPDATE 语句,基于 create_time 字段生成新的 source_id,规则为 create_time * 1000000 加上 6 位随机整数,并确保生成的 source_id 符合指定长度要求。
MySQL 更新 source_id 为 create_time*1000000+6位随机整数
你想根据 create_time
字段的值来更新 source_id
,规则是:
source_id = create_time * 1000000 + 一个6位随机整数
其中:
create_time
是一个10位整数(例如:1712345678)source_id
是一个字符串字段(CHAR(36) 或 VARCHAR(36),通常用于存储UUID)
MySQL UPDATE 语句
UPDATE qf_source
SET source_id = CONCAT(
create_time * 1000000,
LPAD(FLOOR(900000 * RAND()) + 100000, 6, '0')
)
WHERE CHAR_LENGTH(source_id) = 36;
说明
create_time * 1000000
:将时间戳扩展为更大的基数。RAND()
:生成一个介于 0 和 1 之间的随机浮点数。FLOOR(900000 * RAND()) + 100000
:生成一个 [100000, 999999] 区间的随机整数。LPAD(..., 6, '0')
:确保即使生成的是如123
这样的小数字,也填充成6位(比如变成000123
),但上面的表达式已经保证了最小是100000,所以其实可以省略。CONCAT(...)
:把两部分拼接成最终字符串。WHERE CHAR_LENGTH(source_id) = 36
:可选条件,确保只更新原本是 UUID 长度的数据。
示例数据演示
如果 create_time = 1712345678
,那么:
SELECT 1712345678 * 1000000 + FLOOR(900000 * RAND()) + 100000;
-- 可能输出类似:1712345678123456 (后面6位是随机的)
然后赋值给 source_id
,类型会自动转换为字符串。
注意事项
- 原来的
source_id
是36位字符串(如UUID),新生成的 ID 肯定不满足长度36,如果你仍想保留这个字段作为唯一标识,请确认是否需要调整字段长度限制(比如改为VARCHAR(20~25))。 - 如果你希望保持
source_id
为唯一且固定格式,请考虑使用更复杂的逻辑或前缀。
修改字段长度建议(如有需要)
ALTER TABLE qf_source MODIFY source_id VARCHAR(25);