我有两个表跟随和配置文件,并在表格中插入以下配置文件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
在我的插入中更新我确实抛出错误...如果我发表评论抛出错误的服务器节点不要下去...我必须评论这一行并关闭连接?
答案 0 :(得分:0)
Check-before-set 通常不是一个好方法。主要是因为您必须考虑对表的可能并发访问。
无论如何,关于外键约束,如果你使用InnoDB,引擎将在插入时检查你。
所以,我认为通过尝试插入来保持乐观是更好的。但要做好准备妥善处理可能的失败。
编辑:我构建了一个示例,以“证明”数据库引擎InnoDB强制执行完整性约束:http://sqlfiddle.com/#!2/f372d/1
正如您将看到的,错误的数据不插入数据库中。在你的程序中,你将不得不处理相应的异常/错误。