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

  • 相关阅读:
    【js】实现输入框不允许输入某些特殊字符
    springboot集成druid实现数据源监控
    SpringBoot整合Druid并配置数据源监控
    SpringBoot集成Druid实现数据源管理和监控
    同一个catch字句中捕获多个java异常
    【JWT】JSON Web Token原理与实现
    行级锁实验:sql语句条件中的索引对锁的影响
    什么是乐观锁,什么是悲观锁,如何实现
    Linux命令与文件的查找which、wheris、locate、find
    vi编辑器永久设置行号、缩进
  • 原文地址:https://www.cnblogs.com/piaoger/p/2262895.html
Copyright © 2020-2023  润新知