首页 > 解决方案 > 在 Mysql 中使用随机数据更新大量行

问题描述

我有一个包含个人数据的数据库,我想用随机名称等匿名化。例如,表person (id int, first_name varchar, last_name varchar, birth_date date)。我也有一个随机名称的表,例如。first_name (id int, value varchar). 我知道这归结为优化select * from ... order by rand(),我已经阅读了几个关于它的 StackOverflow 问题(和http://jan.kneschke.de/projects/mysql/order-by-rand/),但这并不能回答问题批量更新随机数据。

我试过了:

  1. (最初)UPDATE _person me SET birth_date = (SELECT value FROM anonymizer.birth_date ORDER BY RAND() LIMIT 1)(......其他列相同)。由于有多个表,当我打断它时,匿名整个数据库需要一个小时。
  2. (目前)UPDATE _person me join anonymizer.first_name on anonymizer.first_name.id = round(rand() * (select max(id) from anonymizer.first_name)) SET first_name = anonymizer.first_name.value。这个单一查询花费了 5 分钟(除了其他列和表)。

我可以以任何方式准备我的假数据表(使用序列号等初始化)。有没有办法有效地匿名数据库?

标签: mysqlrandomsql-order-by

解决方案


推荐阅读