When a SELECT
statement is used within SQLite, it moves from a default status of UNLOCKED
to SHARED
, and once the statement is committed, it reverts to UNLOCKED
. There are several states for transaction lock states and locking works when there is autocommit
on or transactional control with autocommit
off within a begin/end statement arrangement. When there is some contention, the transactional locking states may alter from UNLOCKED
to SHARED
, RESERVED
, or EXCLUSIVE
.
If an update is to take place, the programmer may code it so that an EXCLUSIVE
lock is used. This stops updates from other processes, just until the job has been done and the lock is released. In this case, the programmer must also code and put up a message or write to the log file; if this happens, auditors or database administrators will have an audit trail of events during the lifetime of an application. It is a very good practice to do so.