据我了解,现代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,你如何避免这个问题?