我开始一个事务,即将几条记录插入到一个表中。我可以在事务提交之前从数据库中选择最新插入的记录吗?
问问题
5384 次
2 回答
18
是的。
在事务中,您的应用程序可以看到所有内容。
然而,没有其他交易看到变化的任何部分。
事务的重点是使一系列语句看起来像是对数据库的一次原子更改。
如果提交,则事务中的所有语句都已完成,其他人都可以看到效果。
如果您回滚,则事务中的任何语句都不会最终确定,并且数据库不会发生任何更改。
顺便说一句,并非所有语句都可以成为事务的一部分。DDL(例如创建和删除)将结束任何先前的事务。
于 2008-12-18T03:03:27.680 回答
7
是的,在交易期间或之后,您可以使用 last_insert_rowid() 函数。
last_insert_rowid() 函数返回从调用该函数的数据库连接插入的最后一行的 ROWID。
换句话说:
SQLite version 3.6.23
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table T (C);
sqlite> insert into T values ('hello');
sqlite> select last_insert_rowid();
1
sqlite> BEGIN;
sqlite> insert into T values ('test 2');
sqlite> select last_insert_rowid();
2
sqlite> select rowid,* from T;
1|hello
2|test 2
sqlite> ROLLBACK;
sqlite> select last_insert_rowid();
2
sqlite> select rowid,* from T;
1|hello
sqlite>
于 2010-04-16T23:43:44.990 回答