0

フォローしてプロファイルする2つのテーブルがあり、テーブルに続き、以下のプロファイルの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

UPDATE in my Insert I do throw err... コメントした場合、 throw err server node dosen't go down... この行にコメントして接続を閉じる必要がありますか?

4

1 に答える 1

0

データベースを使用している場合、通常、セット前チェックは適切なアプローチではありません。主に、テーブルへの同時アクセスの可能性を考慮する必要があるためです。

とにかく、外部キー制約に関しては、InnoDB を使用する場合、エンジン挿入時にチェックします。

なので、楽観的に入れてみたほうがいいと思います。ただし、起こりうる失敗を適切に処理する準備をしてください。

編集:整合性制約が DB エンジン InnoDB によって強制されていることを「証明」するために例を作成します: http://sqlfiddle.com/#!2/f372d/1

ご覧のとおり、障害のあるデータはDB に挿入されません。プログラムでは、対応する例外/エラーに対処する必要があります。

于 2013-08-03T15:23:26.720 に答える