2017-02-07 67 views
0

我有一個具有唯一varchar列的表。此列包含我可以向其發送推送通知的Android和iOS設備ID。更新行的唯一字段並將現有行中的值設置爲空

如果用戶在其他設備上登錄到其他設備上已存在該ID的帳戶,我希望將原始帳戶的列設置爲空,並將新行替換爲設備ID。

是否有一個語句可以實現這一點?或者我必須創建一個事務,該事務首先檢查表中的值並在更新新記錄之前將其設置爲空?顯然,如果我可以在一個聲明中這樣做,那將是更可取的。

我現在有一個查詢的是::

UPDATE gp_login SET deviceOS='$OS', device_id='$deviceID', id_updated_at=NOW() WHERE email='$email' 

當然,當一個DEVICE_ID已經存在另一行中失敗,根據答案&評論

編輯澄清幾件事桌子。

我使用REPLACE播放,但它刪除行,並有不應丟失的行中的其他數據。

設備ID儘管是唯一的,但不是表的主鍵。 該表格是登錄到移動應用程序服務的移動用戶帳戶的列表。他們的設備ID已更新到其帳戶行中,但仍然是唯一的。我想要更新一行的設備ID,即使其他用戶存在相同的設備ID - 我只想先設置它爲null,以滿足唯一約束條件。

+0

您的查詢在哪裏? –

+0

你能否提供一個粗略的例子來正確引導你? – sagar

+0

感謝您的意見。我已經更新了這個問題。 – Cross2four

回答

0

這太長了評論。

在MySQL中沒有一個語句可以同時執行updateinsert。你有一個選項是insert觸發器。您可以編寫一個觸發器來刪除以前的設備ID。

但是,我不確定這是一個好主意。爲什麼你想忘記以前的設備ID?它看起來像他們可能是有用的,例如,如果一個匿名用戶來到現場,但沒有登錄。

+0

謝謝你,戈登。 請參閱最新的問題,因爲我認爲我之前並不清楚。 – Cross2four

0

您可以添加新的行之前設定的預IDS爲NULL

Update table 
set 
device_id=null 
where accounted=your_account_id and device_id is not null 
0

是東西您的設計有誤。您希望能夠爲每個設備插入多行。但同時你希望設備ID是唯一的。這沒有什麼意義。你可能需要兩張不同的表格。一個將具有唯一的索引,並且只包含當前登錄的用戶。在另一個表格中,您將「不應該丟失的行中的數據」保存。這實際上是一個日誌表。由於設備ID在日誌表中不是唯一的,因此您無需刪除它 - 因此您可以保留更多信息。

相關問題