var promises = [];
promises.push(
sequelize.transaction(function(t1) {
return models.car_service.findAll({
where: sequelize.and(
{ "id_dtc": 6},
{ "id_car": 95 }
),
transaction: t1,
lock: t1.LOCK.UPDATE,
logging: console.log
}).then(function(result) {
console.log(result.dataValues);
if(!result.dataValues){
return models.car_service.create(
{
id_dtc: 6,
id_car: 95,
priority: config.get('apiConfig.coreControllerConfig.createIssueOptions.DTCPriority'),
status: 'new',
dtc_is_pending: false
});
}
})
})
);
promises.push(
sequelize.transaction(function(t2) {
return models.car_service.findAll({
where: sequelize.and(
{ "id_dtc": 6},
{ "id_car": 95 }
),
transaction: t2,
lock: t2.LOCK.UPDATE,
logging: console.log
}).then(function(result) {
console.log(result.dataValues);
if(! result.dataValues){
return models.car_service.create(
{
id_dtc: 6,
id_car: 95,
priority: config.get('apiConfig.coreControllerConfig.createIssueOptions.DTCPriority'),
status: 'new',
dtc_is_pending: false
});
}
})
})
);
return promise.all(promises).then(function(results) {
console.log(results);
});
日志是
Executing (14a1c614-c2f1-46a1-a99f-89bc92ca23dc): SELECT "id", "status", "priority", "mileage", "done_at", "created_at", "updated_at", "id_car", "id_service_type", "id_service_edmunds", "id_service_customized", "id_recall_recallmasters", "id_service_archive", "id_service_mmy", "id_service_preset", "id_dtc", "dtc_is_pending" FROM "car_service" AS "car_service" WHERE ("car_service"."id_dtc" = 6 AND "car_service"."id_car" = 95) FOR UPDATE;
Executing (084558cc-730d-441a-a794-aaa27898db77): SELECT "id", "status", "priority", "mileage", "done_at", "created_at", "updated_at", "id_car", "id_service_type", "id_service_edmunds", "id_service_customized", "id_recall_recallmasters", "id_service_archive", "id_service_mmy", "id_service_preset", "id_dtc", "dtc_is_pending" FROM "car_service" AS "car_service" WHERE ("car_service"."id_dtc" = 6 AND "car_service"."id_car" = 95) FOR UPDATE;
undefined
undefined
有谁知道为什么我仍然在表中添加 2 个相同的行,我认为行锁应该阻止具有选择更新的事务?
最佳答案
您必须在交易的第二个查询中传入相应的交易对象 {transaction: t1}
或 {transaction: t2}
作为选项。
引用示例 ( in the documentation )
关于node.js - 为什么 sequelize 事务 t.lock.UPDATE 不会阻塞其他事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40097043/