在插入之前检查外键是否完整

时间:2013-08-03 15:12:38

标签: mysql node.js

我有两个表跟随和配置文件,并在表格中插入以下配置文件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

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

1 个答案:

答案 0 :(得分:0)

使用数据库时,

Check-before-set 通常不是一个好方法。主要是因为您必须考虑对表的可能并发访问。

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

所以,我认为通过尝试插入来保持乐观是更好的。但要做好准备妥善处理可能的失败。

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

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