2016-09-22 228 views
1

我使用PHP和Mysql。Mysql插入重複鍵非重複鍵

這個SQL工作:

INSERT INTO products (id, title, description) 
      VALUES (10, 'value1', 'value2') 
      ON DUPLICATE KEY UPDATE 
      id=10, 
      title='value25', 
      description='value2' 

id是一個主鍵,爲此它的工作原理。其他字段是varchars。

我的真實情況有點不同。看看這個:

類型介紹和在一起sku它是唯一的。

id sku title description type 
1  abc       one 
2  abc       two 
3  def       one 

所以我的「真實」的關鍵是,我想使用sku和它的通過自己獨特的。這不可能是我的情況。但是與type一起它是獨一無二的。

下面看,它可能會更清楚:

abc-one // Unique combination 
abc-two // Unique combination 
def-one // Unique combination 

是否有可能在這種情況下,使用多插入/更新SQL查詢?

+0

對於我的理解:請問你的更新查詢貌似沒有這個示例值? 「多查詢」究竟意味着什麼? – rbr94

+0

@ rbr94我當前的更新查詢是問題之上的sql。這是一個插入,但也是一個更新'重複密鑰更新'。 –

+0

那麼你爲什麼不發佈真正的問題,而不是一個假設的? – e4c5

回答

1

如果定義列skutypeunique列,則ON DUPLICATE KEY UPDATE表達也將工作,以及如在products表中只有一個PrimaryKey

示例(基於數據):

id sku title description type 
1  abc       one 
2  abc       two 
3  def       one 

//INSERT 
INSERT INTO products (id, sku, type) VALUES (4, 'ghi', 'one') ON DUPLICATE KEY UPDATE ... 

//UPDATE dataset with ID=1 
INSERT INTO products (id, sku, type) VALUES (1, 'ghi', 'two') ON DUPLICATE KEY UPDATE ... 

//UPDATE dataset with sku='abc' and type='one' 
INSERT INTO products (id, sku, type) VALUES (5, 'abc', 'one') ON DUPLICATE KEY UPDATE ... 

因此看到MySQL文檔:https://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html

+0

我不想讓它複雜得多,所以我已經合併了它們並將它設置爲一個新的ID而沒有自動增加。我認爲我以後不會使用這個ID,所以它應該對性能有好處。謝謝! –