2012-06-22 106 views
4

MySQL手冊狀態:如何在沒有UNIQUE索引或PRIMARY KEY的MySQL中使用ON DUPLICATE KEY UPDATE?

如果你指定ON DUPLICATE KEY UPDATE,並且插入一行是 將在

,如果你有什麼UNIQUE索引或PRIMARY KEY導致重複值一個沒有UNIQUE索引或PRIMARY KEY的表,但不想複製列的條目(比如user_id)。

有沒有辦法在MySQL中做到這一點?

+3

有什麼理由,你爲什麼不設置一個唯一的標識列是唯一索引? – Dancrumb

+0

您最好的選擇是爲該列添加一個'UNIQUE'索引。 – hafichuk

+2

如果你有沒有主鍵的表,那麼在你做其他事情之前必須先解決這個問題。 – HLGEM

回答

4
INSERT INTO `table` (value1, value2) 
SELECT 'stuff for value1', 'stuff for value2' FROM `table` 
WHERE NOT EXISTS (SELECT * FROM `table` 
        WHERE value1='stuff for value1' AND value2='stuff for value2') 
LIMIT 1 

來源:How to 'insert if not exists' in MySQL?

+2

我的情況是相同的,但我想要的是如果記錄存在然後更新該記錄,是否有可能沒有唯一的主鍵 – pitu

1

如果你希望數據庫來控制數據的完整性,那麼唯一索引只需要創建該數據UNIQUE約束的MySQL的方式。

如果您不希望數據庫負責數據完整性,則需要通過其他方式(通過應用程序或ETL代碼)控制數據。通常這將涉及事先掃描表以驗證該值不存在,然後執行插入。

對於您要做的事情有一個更清晰的問題,我們可以幫助提供更好的答案。

0

試試這個:

INSERT INTO `table` (userid) 
SELECT 'value for userid' FROM `table` 
    WHERE userid = 'value for userid' HAVING count(*) = 0 
相關問題