gpt4 book ai didi

mysql - 序列化涉及 "last inserted row id"的特殊查询

转载 作者:行者123 更新时间:2023-11-29 11:33:37 24 4
gpt4 key购买 nike

我有以下数据库结构(以 SQLite 方言表示):

CREATE TABLE `Clocks` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `time` DATETIME);
CREATE TABLE `Operations`
(
`_id` UUID NOT NULL PRIMARY KEY,
`finished` TINYINT(1) NOT NULL DEFAULT 0,
`launchedOn` BIGINT REFERENCES `Clocks` (`_id`) ON DELETE SET NULL ON UPDATE CASCADE,
`finishedOn` BIGINT REFERENCES `Clocks` (`_id`) ON DELETE SET NULL ON UPDATE CASCADE
);

现在我想在 Sequelize.js 中实现的效果类似于 SQLite 中的以下 SQL 查询:

BEGIN TRANSACTION;
INSERT INTO Clocks(time) VALUES (date('now'));
INSERT INTO Operations(_id, finished, userId, launchedOn) VALUES ('00000000-0000-0000-0000-000000000001', 0, last_insert_rowid());
COMMIT;

以及以下内容:

BEGIN TRANSACTION;
INSERT INTO Clocks(time) VALUES (date('now'));
UPDATE Operations
SET finished = 1,
finishedOn = last_insert_rowid()
WHERE _id = '00000000-0000-0000-0000-000000000001';
COMMIT;

我用 Sequelize.js 做了一些调查,我知道如何组织上述事务,但我不知道如何将 last_insert_rowid() 包含到插入项列表中。顺便说一句,这个函数是 SQLite 特定的,有跨数据库替代品吗?

提前谢谢您!

最佳答案

您可以尝试这些,您可以返回插入时创建的结果对象并在下一个查询中使用它。

第一个查询:

return sequelize.transaction(function (t) {
return Clocks.sync().then(function(){
return Clocks.create({
time: Sequelize.fn('date', 'now')
});
}).then(function(clock){
return Operations.sync().then(function(){
return Operations.create({
id: '00000000-0000-0000-0000-000000000001',
finished: 0,
launchedOn: clock.id
}, {transaction: t});
});
});
});

第二个查询:

return sequelize.transaction(function (t) {
return Clocks.sync().then(function(){
return Clocks.create({
time: Sequelize.fn('date', 'now')
});
}).then(function(clock){
return Operations.sync().then(function(){
return Operations.update({
finished: 1,
finishedOn: clock.id
},
{where: { id: '00000000-0000-0000-0000-000000000001'}},
{transaction: t});
});
});
});

我很确定您可以对其他方言执行相同的操作。

关于mysql - 序列化涉及 "last inserted row id"的特殊查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36989829/

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