3
在找不到符合我需求的任何內容之後,我編寫了這段代碼來一致地對mysql中列的值進行洗牌。有一個更好的方法嗎?如何在MySql中對列進行洗牌
**Original table:**
+----+-----------+
| id | fname |
+----+-----------+
| 1 | mike |
| 2 | ricky |
| 3 | jane |
| 4 | august |
| 6 | dave |
| 9 | Jérôme |
+----+-----------+
**Possible output:**
+----+-----------+
| id | fname |
+----+-----------+
| 1 | dave |
| 2 | jane |
| 3 | mike |
| 4 | ricky |
| 6 | Jérôme |
| 9 | august |
+----+-----------+
DROP TEMPORARY TABLE IF EXISTS shuffle1;
DROP TEMPORARY TABLE IF EXISTS shuffle2;
CREATE TEMPORARY TABLE shuffle1 (id int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), original_values varchar(255), key original_values(original_values));
CREATE TEMPORARY TABLE shuffle2 (id int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), original_ids int(11), key original_ids(original_ids));
INSERT INTO shuffle1 (id, original_values) SELECT NULL, table1.fname FROM table1 ORDER BY rand();
INSERT INTO shuffle2 (id, original_ids) SELECT NULL, table1.id FROM table1;
UPDATE table1 SET table1.fname = (SELECT shuffle1.original_values FROM shuffle1 JOIN shuffle2 ON shuffle2.id = shuffle1.id WHERE table1.id = shuffle2.original_ids);
什麼是你的目標嗎? – tadman
數據安全:假設您有一個包含您的客戶端列表的生產表,其中包含兩列 - first_name和last_name,您希望在測試環境中使用它,但此信息非常敏感。洗牌一欄保留了用戶的所有原始值和隱私。 – Ronna
您可能要做的是複製整個數據庫,然後對特定列的值進行加擾,將其替換爲隨機數據。至少可以說,你在這裏做的事情相當混亂。 – tadman