zoukankan      html  css  js  c++  java
  • [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

  • 相关阅读:
    systabcontrol32
    winform 进程唯一,打开第二个激活第一个进程的窗体显示
    winform在 Xp下杀死进程
    安装包创建桌面快捷方式
    [最短路/线段树大法优化DIJ] 【模板】单源最短路径(标准版)
    [线段树模板题] 线段树2
    [线段树优化应用] 数星星Star
    [倍增思想/变种最短路] 跑路
    [DP/变种背包] SOFTWARE
    [前缀和/数论] 数列
  • 原文地址:https://www.cnblogs.com/piaoger/p/2262895.html
Copyright © 2011-2022 走看看