• [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

  • 相关阅读:
    Mstsc 微软远程桌面控制工具
    session
    防止重复提交表单
    nginx日志格式及自定义日志配置
    代码审核:安全性测试方案
    代码审计:安全性测试方案
    Word转换为Html (用处:生成一些注册协议之类的)
    技术人员的发展之路 (转载)
    phpcms 杂记
    ThinkPHP 日志
  • 原文地址:https://www.cnblogs.com/piaoger/p/2262895.html
Copyright © 2020-2023  润新知