in sqlite3, can a select succeed within a transaction of insert?

℡╲_俬逩灬. 提交于 2019-12-01 15:14:09

问题


I begin a transaction, which is to insert several records into a table. Can I select the latest inserted record out of the database before the transaction commit?


回答1:


Yes.

Inside a transaction, your application sees everything.

No other transaction, however, sees any part of the change.

The point of a transaction is to make a sequence of statements appear to be one atomic change to the database.

If you commit, all statements in the transaction are finalized, and everyone else can see the effects.

If you rollback, no statement in the transaction is finalized, and no change occurs to the database.

Not all statements can be part of a transaction, BTW. DDL (Create and Drop, for example) will end any previous transaction.




回答2:


Yes, during or after the transaction you can use the last_insert_rowid() function.

The last_insert_rowid() function returns the ROWID of the last row inserted from the database connection which invoked the function.

In other words:

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>


来源:https://stackoverflow.com/questions/376773/in-sqlite3-can-a-select-succeed-within-a-transaction-of-insert

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!