我正在将大量数据插入数据库,我想获取生成的ID。 (插入的ID)问题是我们并行进行了许多查询,这使插入的ID不正确。
我可以使用两个查询1 INSERT和1 SELECT来做到这一点,但是我想保存SELECT查询,所以我使用的是res.insertId。 但是 insertId 不正确。
也许我丢失了某些内容或使用了SQL错误?我应该信任res.insertId吗?
初始化函数。
async function init() {
await truncateTable();
await fillDBWithTable();
const transaction = await startTransaction();
await makeSecondaryQuery(); // Parallel Query
await makeMainQuery(transaction); // <== Main!
await makeSecondaryQuery(); // Parallel Query
await commitTransaction(transaction);
await makeSecondaryQuery(); // Parallel Query
}
makeMainQuery
function makeMainQuery(transaction) {
const names = [
['Itay', 'Main'],
['Eyal', 'Main'],
['Nir', 'Main'],
['Yoram', 'Main'],
['Nahum', 'Main'],
['Takum', 'Main'],
['Yossi', 'Main'],
];
return new Promise((resolve, reject) => {
connections.executeMysqlQuery(transaction, `INSERT INTO probedata.Persons (FirstName, LastName) VALUES ?`,
[names], 'all', function (err, res) {
if (err) {
reject(err);
return;
}
const insertedTagsIds = [];
for (let i = 0; i < names.length; i++) {
insertedTagsIds.push(res.insertId + i);
}
console.log(insertedTagsIds); // <== OUTPUT - Pay attention to this!
resolve(insertedTagsIds);
});
});}
makeSecondaryQuery
function makeSecondaryQuery() {
const names = [
['PAPA', 'Secondary'],
['TATA', 'Secondary']
];
return new Promise((resolve, reject) => {
connections.executeMysqlQuery('test', `INSERT INTO probedata.Persons (FirstName, LastName) VALUES ?`,
[names], 'all', function (err, res) {
if (err) {
reject(err);
return;
}
});
});
}
控制台输出:[0、1、2、3、4、5、6]
MYSQL输出:
谢谢,伊泰。