2014-01-16 45 views
0

我有關係的MySQL數據庫的設置是這樣的:MySQL的關係插入

COMMAND    SOURCE   DESTINATION 
id     id    id 
datetime    name    name 
source_id   location_id  data_type 
destination_id 

LOCATION    
id 
name 

可能有許多的來源和目的地的命令和消息人士透露許多地方。

我接收命令使用以下值(命令ID自動增量):

datetime = 12345671234 
source = "source_device_one" 
destination = "destination_device_one" 

我需要的方式,將所述指令值到數據庫中時,程序檢查是否「source_device_one」是出了名它已經存在於SOURCE表中,如果有的話,它會得到它的ID,如果沒有,它會將它插入到表中並檢索命令插入的ID。同樣需要爲目標設備完成。我知道我可以以編程方式進行單獨的查詢(在python/php中,通過首先檢查每個設備是否存在於它們各自的表中並獲取它的ID /插入它,如果不是的話),但是這會需要相當多的查詢/代碼行 - 我試圖創建的系統需要儘可能快速和高效,因爲它是從流中讀取命令的。

我會非常感興趣的聽到你的意見是最好的方法來做到這一點。

非常感謝。

+1

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html –

回答

0

乾杯數字克里斯 - 我已經看過那個頁面,但你向我確認我應該更多地考慮這一點。大致我的解決方案:

INSERT INTO source(name) VALUES ('box1') ON DUPLICATE KEY UPDATE id=last_insert_id(id); 
SET @source = last_insert_id(); 
INSERT INTO destination(name) VALUES ('hole1') ON DUPLICATE KEY UPDATE id=last_insert_id(id); 
SET @dest = last_insert_id(); 
INSERT INTO command(datetime,source_id,destination_id) VALUES(NOW(), @source, @dest) 

到目前爲止我的工作速度足夠快!