2011-03-03 74 views
0

我有一個表有兩個字段。可以有多個行具有相同的每個字段的值,但只有一行的兩個值相同。插入或更新(無鑰匙)

嗯,這並沒有聽起來很好,所以這裏的一些例子:

good stuff 
a, 1 
a, 2 
b, 1 
b, 2 < ==== all are unique combinations 

bad stuff 
a, 1 
a, 1 <=== this permutation should only occur once 

所以,作爲僞代碼:if no row exists with both columns of the give values, then UPDATE INSERT a new row (else, do nothing).

表中沒有的鍵(就是那個錯了嗎?)。有沒有一個單一的命令來做到這一點,INSERT IF NOT EXISTS?或者我首先要搜索,然後決定是否要INSERT?

ODBC中優選的,雖然它是目前,僅在MySQL

回答

1
  1. 我不認爲你正在尋找一個upsert查詢 - 如果該鍵被發現,將更新,否則就插入。
  2. 您可以使多個列成爲主鍵。這樣做會在表上設置一個唯一的約束,這將不允許重複插入。但是,在大多數數據庫中,它會反彈一個錯誤,所以如果您正在進行批量更新/複製,則不會提交任何更新。

在使多個字段成爲主鍵的數據庫術語中稱爲複合/複合/連接鍵。

2

您可能正在尋找INSERT ... ON DUPLICATE KEY UPDATE。 (請注意,您需要必須在您的表中有一個唯一的密鑰才能工作)

+0

他沒有鑰匙到位。爲了這個工作,你需要有一個主鍵或唯一的索引。 @LonixSolutions,擁有密鑰總是好的,因爲密鑰的性能會更好 – Rasika 2011-03-03 03:35:50