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

在我的插入中更新我确实抛出错误......如果我评论抛出错误服务器节点不会关闭......我必须评论这一行并关闭连接?

4

1 回答 1

0

使用数据库时,设置前检查通常不是一个好方法。主要是因为您必须考虑对表的可能并发访问。

无论如何,关于外键约束,如果您使用 InnoDB,引擎在插入时为您检查。

所以,我认为最好通过尝试插入来保持乐观。但要准备好优雅地处理可能的失败。

编辑:我构建了一个示例以“证明”数据库引擎 InnoDB 强制执行完整性约束:http ://sqlfiddle.com/#!2/f372d/1

正如您将看到的,错误数据不会插入数据库中。在您的程序中,您将不得不处理相应的异常/错误。

于 2013-08-03T15:23:26.720 回答