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);

上一篇      下一篇