有人可以運行一個健全性檢查以下查詢。我們正在嘗試更新數據庫,將25000個隨機用戶移動到新的測試電子郵件版本(將其emp_version更改爲「0.6.3」)。我們只想更改當前處於活動狀態1且當前emp_version爲「0.6.2」的用戶。MySQL健康檢查
UPDATE email_users
SET emp_version="0.6.3"
WHERE active = 1
AND emp_version="0.6.2"
ORDER BY rand() LIMIT 25000;
有人可以運行一個健全性檢查以下查詢。我們正在嘗試更新數據庫,將25000個隨機用戶移動到新的測試電子郵件版本(將其emp_version更改爲「0.6.3」)。我們只想更改當前處於活動狀態1且當前emp_version爲「0.6.2」的用戶。MySQL健康檢查
UPDATE email_users
SET emp_version="0.6.3"
WHERE active = 1
AND emp_version="0.6.2"
ORDER BY rand() LIMIT 25000;
單表更新
您可以使用ORDER BY和限制。 檢查http://dev.mysql.com/doc/refman/5.7/en/update.html
UPDATE email_users
SET emp_version="0.6.3"
WHERE active = 1
AND emp_version="0.6.2"
ORDER BY rand() LIMIT 25000;
多表更新(使用INNER JOIN)
在多表更新的情況下,一個不能使用ORDER BY,LIMIT更新詢問,以便使用它們,我們使用子查詢獲得25000個所需的元組,然後用同一個表進行INNER JOIN。我們無法更新子查詢表,因爲它實際上不存在於數據庫中。
下面的查詢嘗試
UPDATE email_users eu INNER JOIN
(SELECT * FROM email_users
WHERE emp_version="0.6.2"
AND active = 1
ORDER BY rand()
LIMIT 25000) AS neu
SET eu.emp_version="0.6.3"
WHERE eu.id = neu.id
它應該讀取WHERE emp_version =「0.6.2」,但否則它的工作很好。謝謝! – user2694306 2014-10-31 07:07:12
抱歉我的不好,現在糾正:) – 2014-10-31 07:08:05
我看不到這個查詢比原來的優勢。我錯過了什麼嗎? – Strawberry 2014-10-31 07:46:32
請讓我知道確切的錯誤你在查詢中所面臨的語法看起來相當不錯。 – 2014-10-31 07:28:14
沒有錯誤,它只是一個健全的檢查,以確保我不會搞砸生產數據庫。 – user2694306 2014-10-31 10:16:04
不要我的,但你的代碼是完全正常:) – 2014-11-01 06:01:36