[Database]SQLite3 Transaction [事务处理]

>> Transaction

Begin Transaction

Commit Transaction

Rollback Transaction


>> No Nest Transaction

Use SavePoint instead.

SAVEPOINTs are a method of creating transactions, similar to BEGIN and COMMIT, except that the SAVEPOINT and RELEASE commands are named and may be nested.

Create SAVEPOINT

Release

>> 三种Transaction类型

Deferred/Immediate/Exclusive

    // From My Sqlite3 wrapper: SqliteDataTypes

///
<summary>
/// Three types of transactions in SQLite: Deferred, Immediate and Exclusive
/// The default transaction behavior is deferred.
///<summary>
enum TransactionType
{
///<summary>
/// Deferred Transaction is the default transaction in SQLite.
/// Statement can be "BEGIN DEFERRED" or "BEGIN".
/// Deferred means that no locks are acquired on the database until the database is first accessed.
/// Thus with a deferred transaction, the BEGIN statement itself does nothing to the filesystem.
/// Locks are not acquired until the first read or write operation.
/// The first read operation against a database creates a SHARED lock
/// and the first write operation creates a RESERVED lock.
/// Because the acquisition of locks is deferred until they are needed,
/// it is possible that another thread or process could create a separate transaction
/// and write to the database after the BEGIN on the current thread has executed.
///</summary>
kDeferred = 0,

///<summary>
/// Deferred Transaction is the default transaction in SQLite.
/// Statement is "BEGIN IMMEDIATE".
/// If the transaction is immediate, then RESERVED locks are acquired on all databases
/// as soon as the BEGIN command is executed, without waiting for the database to be used.
/// After a BEGIN IMMEDIATE, it is guaranteed that no other thread or process
/// will be able to write to the database or do a "BEGIN IMMEDIATE" or "BEGIN EXCLUSIVE".
/// Other processes can continue to read from the database.
///</summary>
kImmediate = 1,

///<summary>
/// Statement is "BEGIN EXCLUSIVE".
/// An exclusive transaction causes EXCLUSIVE locks to be acquired on all databases.
/// After a BEGIN EXCLUSIVE, no other database connection
/// except for read_uncommitted connections will be able to read the database
/// and no other connection without exception will be able to write the database
/// until the transaction is complete.
///<summary>
kExclusive = 2
};


>>官方文档

http://www.sqlite.org/lang_transaction.html

http://www.sqlite.org/lang_savepoint.html

posted on 2011-11-25 11:28  飘行天下  阅读(2607)  评论(0编辑  收藏  举报

导航