SQLite的last_insert_rowid()是否仍适用于持久数据库连接?

时间:2017-05-18 17:17:32

标签: database sqlite

据我了解,现代Web框架使用持久性数据库连接。我想知道这对SQLite的 last_insert_rowid()有什么影响。

我使用 last_insert_rowid()来获取上一次插入的唯一ID。假设我有一个目前有22条记录的用户表。然后我做了:

insert into Users (UserName,RealName) values ('jdoe','John Doe')
select last_insert_rowid()

在这种情况下, last_insert_rowid()返回23.我可以使用此ID值显式访问此新插入的记录。

现在,根据SQLite文档, last_insert_rowid()仅适用于当前连接。因此,如果其他用户使用其他连接访问数据库,一切都很好。但对于共享/持久数据库连接,是否存在问题?

想象一下这种情况:

(1)用户A执行:

insert into Users (UserName,RealName) values ('jdoe','John Doe')

(2)用户B:

insert into Tools (ToolName) values ('Widget')

(3)用户A执行:

last_insert_rowid()

在这种情况下,两个用户都在进行插入操作。虽然用户A的步骤1和3 假设是连续的,但它们不是。用户B的插入实际上在它们之间徘徊。那么,在这种情况下,用户A的第3步 last_insert_rowid()是否会返回步骤 1 或步骤 2 的最后一行插入ID?如果是2,你如何避免这个问题?

0 个答案:

没有答案