On 10 Sep 2015, at 5:05pm, Nguyen Dang Quang <quangnd at gmail.com> wrote:

> In (4) the selected rows will have old or new values?

Read this:

<https://www.sqlite.org/isolation.html>

"Within a single database connection X, a SELECT statement always sees all 
changes to the database that are completed prior to the start of the SELECT 
statement, whether committed or uncommitted. And the SELECT statement obviously 
does not see any changes that occur after the SELECT statement completes. But 
what about changes that occur while the SELECT statement is running? What if a 
SELECT statement is started and the sqlite3_step() interface steps through 
roughly half of its output, then some UPDATE statements are run by the 
application that modify the table that the SELECT statement is reading, then 
more calls to sqlite3_step() are made to finish out the SELECT statement? Will 
the later steps of the SELECT statement see the changes made by the UPDATE or 
not? The answer is that this behavior is undefined."

In other words, even if you do some experiments and figure out which one SQLite 
is doing now for one specific query, do not depend on this behaviour staying 
the same in future versions of SQLite, or even for different queries in the 
same version of SQLite.

If you want guaranteed consistent behaviour, do your operation in two different 
connections.  Then the answer depends on whether you are using WAL mode or not.

Simon.

Reply via email to