gpt4 book ai didi

mysql - Sails 和 MySQL 正在创建重复的行

转载 作者:行者123 更新时间:2023-11-29 12:19:48 25 4
gpt4 key购买 nike

我正在将 sails 与 mysql 结合使用,但异步流程出现问题,导致数据库中创建重复行。

我有一个一对多的关系,其中一家餐厅可以有很多评论。在我的评论创建操作中,我首先在数据库中查看与新评论关联的餐厅是否已经存在。如果存在,我会获取现有 ID,否则我会为餐厅创建一个条目,然后使用新 ID 作为外键将评论与新餐厅关联起来。

问题是当数据库中不存在的同一家餐厅同时提交多个评论时。每个创建的评论都会在数据库中查找该餐厅,但该餐厅并不存在。因此,每个创建者都会为餐厅创建一个条目。因此,同一餐厅将存在重复条目。

我不确定防止此问题的最佳方法是什么。有人有建议吗?这将不胜感激。谢谢。

这是我的代码:

create: function(req, res) {
//probably put this in a helper
var validAttributes = ["content", "foursquareId", "author"];
validAttributes.unshift(req.body);
var reviewParams = _.pick.apply(null, validAttributes);

async
.waterfall(
[
function(callback) {

Venue
.findOneByFoursquareId(reviewParams.foursquareId)
.exec(function(err, existingVenue) {

debugger;

if (err) {
console.log("Error: " + err);
return res.send(500, "Error finding venue: " + err);
}

if (! existingVenue) {

// The Venue Exists in the Database

sails.venuesHelper
.create(reviewParams.foursquareId, function(err, newVenue) {

if (err) {
console.log("Error creating venue: " + err);
return res.send(500, "Error creating venue: " + err);
}

console.log('created : ', newVenue);
reviewParams.venue = newVenue.id;

callback(null);

});

}
else {

console.log('existed : ', existingVenue);

reviewParams.venue = existingVenue.id;

callback(null);

}

});

},

function(callback) {

// The venue exists in the database.

review.create(reviewParams)
.exec(function(err, review) {

if (err) {
console.log("Error: " + err);
return res.send(500, "review could not be saved: " + err);
}

console.log(review);

callback(null, review);

});

},

],
function(err, results) {

return res.json(results);

}
);

},

最佳答案

我的方法是让 fourSquareId 成为唯一键,然后第二次插入将无法插入重复的记录。

您可以添加对插入的检查,一旦出现错误,在一秒钟左右后再次尝试,如果再次失败,则抛出异常。

关于mysql - Sails 和 MySQL 正在创建重复的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29198036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com