2014-11-03 47 views
0

以前已經討論過,但我無法理解我找到的答案。將新行插入到SQL表中的正確方法,但只有在對不存在的情況下

本質上,我有一個表三列備註,用戶和keyid(最後一個是主要的和AUTO_INC)。我插入一對值(備忘錄和用戶)。但是,如果我嘗試再次插入同一對,則不應該發生。

從我發現,做到這一切的方法都取決於一個獨特的關鍵(我已經在keyid中),但我不明白的是,你仍然需要做第二個查詢只是爲了獲得現有情侶的鑰匙(或者什麼都不要,在這種情況下,你會繼續插入)。

有沒有辦法在單個查詢中完成所有這些工作?或者我理解我讀過的東西(使用REPLACE或IGNORE)是錯誤的?

+2

您的情況中的這一對是由'備忘錄,用戶'定義的。然而,你有一個主鍵(這也是唯一的),它是'auto_increment' - 這意味着你永遠不會得到相同的主鍵。但是,你可以得到'備忘錄,用戶'的相同組合。爲了防止這種情況,您添加另一個鍵 - 「獨特(備忘錄,用戶)」。現在你不能有相同的備忘錄和用戶,你可以執行查詢,比如'INSERT INTO ON DUPLICATE KEY UPDATE'等等。但是,這樣的一對可能不是最佳的,並且不知道更多的細節(備忘錄和用戶的數據類型),只要我能幫到你。 – 2014-11-03 11:02:47

回答

1

你插入時需要設置用戶+備忘錄的唯一密鑰,

ALTER TABLE mytable 
ADD CONSTRAINT unique_user_memo UNIQUE (memo,user) 

,然後使用INSERT IGNOREREPLACE根據您的需要。您當前的唯一密鑰是主密鑰,這一切都很好,但您需要第二個密鑰才能允許插入重複數據。如果您不在兩個列上一起創建新的唯一密鑰,那麼在每次插入之前您都需要執行SELECT查詢,以檢查該對是否已經存在。

+0

非常感謝!當天就清除! – aarelovich 2014-11-03 11:29:18

相關問題