我使用node.js sqlite3来操作数据。我使用这些代码将数据插入数据库并插入id:
db.run("INSERT INTO myTable (name) VALUES ('test')");
db.get("SELECT last_insert_rowid() as id", function (err, row) {
console.log('Last inserted id is: ' + row['id']);
});
我认为这不稳定。我的数据库连接始终打开。当我的服务器在来自客户端的多个同时连接上提供此代码时,SELECT last_insert_rowid()
是否正确获取ID?
sqlite是last_insert_rowid原子吗?
感谢。
答案 0 :(得分:8)
通过文档sqlite3 Database#run(sql, [param, ...], [callback])
你可以从回调中追溯lastID
。
答案 1 :(得分:7)
try{
db.run("INSERT INTO TABLE_NAME VALUES (NULL,?,?,?,?)",data1,data2,data3,data4,function(err){
if(err){
callback({"status":false,"val":err});
}else{
console.log("val "+this.lastID);
callback({"status":true,"val":""});
}
});
}catch(ex){
callback({"status":false,"val":ex});
}
this.lastID返回最后插入的行标识By documentation sqlite3 Database#run(sql, [param, ...], [callback])
答案 2 :(得分:3)
对于Node.js Sqlite3最后插入的id你可以使用lastId
这是一个简单的例子
db.run("INSERT INTO foo ...", function(err) {
if(null == err){
// row inserted successfully
console.log(this.lastID);
} else {
//Oops something went wrong
console.log(err);
}
});
答案 3 :(得分:1)
last_insert_rowid()
返回此连接上最后一次插入操作的ROWID。
如果从同一数据库连接上的多个线程调用该函数,则结果是不可预测的。
文档(针对C API): https://www.sqlite.org/c3ref/last_insert_rowid.html
如果您不在多个线程之间共享数据库连接(会话)以进行并发插入,则这是安全的。如果在同一连接上插入多个线程,则这是不安全的,即您可能获得ID或完全无效的ID。
答案 4 :(得分:-1)
This.data.lastID
将为您提供最后插入的ID。