好吧,我有一張表,我將收集用戶設備。當用戶登錄時,我希望它註冊設備,如果它已經存在,它只想更新時間戳。這是隻有在如果值存在,請更新
用戶登錄的表看起來像這樣:
device_id => BIGINT AUTOINCREMENT PRIMARY KEY
user_id => BIGINT FOREIGN KEY users(id)
device_name => VARCHAR(40) (Will be like 'Donald ducks iphone')
device_type => VARCHAR(10) (Will be defined by the client, like "IOS")
last_usage => TIMESTAMP (On update, new timestamp and all that)
所以,當用戶登錄時,我有USER_ID,DEVICE_NAME,DEVICE_TYPE。
我想要的: 如果id,name和type已經存在於一行中,只是更新時間戳,否則插入值。
由於這與主鍵無關,我不知道如何做到這一點。當然,我可以做這樣的事情首先選擇這些值,返回事後做更新/插入,但這並不感覺吧:)
如果值已經存在,'INSERT IGNORE'跳過;它不更新它。請參閱http://stackoverflow.com/a/4723200/924643 –
當然,但由於device_id是AUTO_INCREMENT(我不知道插入/更新此ID),它創建它呢...主鍵不能是相同的它是auto_increment。我應該設置這些列,我有其他的鍵類型或什麼? – gubbfett
@ aam1r是的我知道,這是所需的行爲。 'REPLACE'將改變ID和時間戳,這是錯誤的。 –