2013-08-03 138 views
0

之前完整性我有跟隨和外形的兩個表,然後按照下面的配置文件的表插入ID(外鍵)檢查外鍵是插入

如何我可以插入我的表外前務必匹配表的配置文件ID的鍵?

var o_segui = { 
    seguace_id: profilo, 
    seguito_id: data.profilo_da_seguire, 
    created: new Date() 
}; 

connection.query('INSERT INTO follow SET ?', o_segui, function(error, rows) { 
if (error) { 
    var err = "Error on 'seguiAction': " + error; 
    console.error(err); 
    throw err; 
} 

現在我檢查目前已與查詢存在插入像以前一樣:在我插入

connection.query('SELECT count(*) as n FROM profile WHERE id =' + connection.escape(profilo_da_seguire), function(error, rows) { 
if (error) { 
    var err = "Error on 'verifico Profilo': " + error; 
    console.error(err); 
    throw err; 
} 

console.log(rows); 

if (rows.shift().n > 0) { then OK 

更新我就扔嗯...如果我評論這麼想的走下來扔ERR服務器節點...我必須評論這條線並關閉連接?

回答

0

設置先檢查的通常不會同時使用數據庫一個很好的方法。主要是因爲你必須考慮到可能的併發訪問你的表。

無論如何,關於外鍵約束,如果你使用InnoDB,引擎在插入時檢查你。

所以,我覺得這是更好地被嘗試插入樂觀。但要準備妥善處理可能的失敗。

編輯:我爲了建立一個例子來「證明」完整性約束是由數據庫引擎InnoDB的強制執行:http://sqlfiddle.com/#!2/f372d/1

正如你所看到的,錯誤的數據插入數據庫。在你的程序中,你將不得不處理相應的異常/錯誤。

+0

是的,但如果我的外鍵不完整,我的服務器節點就會關閉 – Barno

+0

請重新閱讀我的答案,並嘗試在InnoDB表上嘗試更多外鍵約束。你會看到,如果你正確定義了你的表,那麼「不好的數據」永遠不會被插入。簡單地說,數據庫的*完整性*由引擎*強制執行。但是*你*必須在程序層面處理可能的失敗。 –

+0

這是工程,現在我怎麼能在node.js中做到這一點:) ..我接收錯誤:ER_NO_REFERENCED_ROW_ – Barno