2014-10-30 91 views
1

我通過API獲取業務價值並將其插入到數據庫中。更新MYSQL數據庫

SNO  ID   category 
1    aaa   Machine learning 
2    aaa   AI 
3    bbb  mobile 

其中SNO是設置爲自動增量的主鍵。 現在2天后,爲了讓我的數據庫保持最新狀態,我需要從API獲取新數據。 因此,假設我知道ID'aaa'現在又有一個類別爲「數據結構」

問題: 如何更新我的表以反映這個新類別? 我期待像

SNO  ID   category 
1    aaa   Machine learning 
2    aaa   AI 
3    bbb  mobile 
4    aaa   data structures 

我不知道SNO,因爲它們是自動遞增。 刪除ID =「aaa」的所有行然後再次插入是一種選擇,但我試圖避免這種情況,因爲它可能會增加開銷。

我從API獲得新的價值,

所以我得到機器學習,人工智能和數據結構(全部3) 如果我使用,所以在我的代碼時,我遍歷類變量3 SQL將生成

INSERT INTO tablename (ID, category) VALUES ('aaa', ‘Machine learning’); 
INSERT INTO tablename (ID, category) VALUES ('aaa', ‘AI’); 
INSERT INTO tablename (ID, category) VALUES ('aaa', 'data structures'); 

因此,在這種情況下,第一和第二插入語句將被複制,我的表將有重複的行 。 。

基本上,我需要檢查ID和類別在BD存在,如果他們不然後插入?(主鍵SNO設置爲自動增量)

+ Options      

Field Type Null Key Default Extra 
uuid varchar(50) NO  NULL   
categoryName varchar(50) NO  NULL   
sno int(5) NO PRI NULL   
+0

似乎MySQL支持合併,非標準語法;檢查http://mechanics.flite.com/blog/2013/09/30/how-to-do-an-upsert-in-mysql/ – okaram 2014-10-30 04:38:07

+0

爲什麼不使用簡單的'INSERT'語句? – 2014-10-30 04:44:18

回答

2

如果你只需要插入新的「數據結構「行,它會有下一個自動遞增的數字,在你的情況下可能是4.唯一不是4的時間是如果你插入一些行並刪除它們,這會導致自動遞增計數器更高。你可以插入這樣的行:

INSERT INTO tablename(ID,category)VALUES('aaa','data structures');

或者我可能沒有正確理解問題。如果不回覆,我會盡力幫忙。

+0

我從API獲取新值, 所以我得到機器學習,人工智能和數據結構(全部3) 如果我使用,所以在我的代碼中,當我遍歷類別變量3 SQL將生成 INSERT INTO表名(ID,類別)VALUES('aaa','機器學習'); INSERT INTO tablename(ID,category)VALUES('aaa','AI'); INSERT INTO tablename(ID,category)VALUES('aaa','data structures'); 所以在這種情況下,第一個和第二個插入語句將被複制,我的表將會有重複的行 – Yahoo 2014-10-30 04:56:30

+1

我可能需要更多地瞭解您正在使用的API。但是,您有幾個選項。您可以隨時查詢表以查看某行是否已經存在(SELECT FROM tablename WHERE ID ='aaa'AND category ='data structures'),如果沒有匹配,則插入。如果您發佈更多關於API如何工作的細節,我們可以爲您提供更好的解決方案。 – 2014-10-30 05:16:05

+0

是的,我需要檢查它是否在數據庫中,如果不存在,然後插入。那個SQL看起來像什麼? INSERT ON DUPLICATE KEY將考慮主鍵?但我的主鍵是SNO而不是業務ID – Yahoo 2014-10-30 16:39:32