MySQL事务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL事务相关的知识,希望对你有一定的参考价值。

mysql事务:

事务:一组原子性的SQL查询,或者说一个独立工作单元。

    事务日志:

ACID测试:
    A:atomicity,原子性;整个事务中的所有操作要么全部成功执行,要么全部失败后回滚;
    C:consistency, 一致性;数据库总是从一个一致性状态转换为另一个一致性状态;
    I:Isolation,隔离性;一个事务所做出的操作在提交之前,是不能为其它所见;隔离有多种隔离级别;
    D:durability: 持久性;一旦事务提交,其所做的修改会永久保存于数据库中;

事务:
    启动事务:START TRANSACTION
        ...
        ...
    结束事务:
        (1) COMMIT:提交
        (2) ROLLBACK: 回滚

    注意:只有事务型存储引擎方能支持此类操作;

    建议:显式请求和提交事务,而不要使用“自动提交”功能;
        autocommit={1|0}

    事务支持savepoint
        SAVEPOINT identifier
        ROLLBACK [WORK] TO [SAVEPOINT] identifier
        RELEASE SAVEPOINT identifier

    事务隔离级别:
        READ UNCOMMITTED (读未提交)
        READ COMMITTED (读提交)
        REPEATABLE READ (可重读)
        SERIALIZABILE (可串行化)

        隔离级别过低,可能存在问题:
            脏读;
            不可重复读;
            幻读;
            加锁读;

            mysql> SHOW GLOBAL VARIABLES LIKE ‘%isola%‘;  #查看隔离级别
            +---------------+-----------------+
            | Variable_name | Value           |
            +---------------+-----------------+
            | tx_isolation  | REPEATABLE-READ |
            +---------------+-----------------+
            1 row in set (0.00 sec)
            MariaDB [(none)]> SHOW VARIABLES LIKE ‘tx%‘;

        tx_isolation:服务器变量,默认为REPEATABLE-READ;可在SESSION级进行修改;

        mysql> SET tx_isolation=‘‘;  #修改隔离级别命令 
        mysql> SET tx_isolation=‘READ-UNCOMMITTED‘;
            READ-UNCOMMITTED
            READ-COMMITTED
            REPEATABLE-READ
            SERIALIZABLE

        MVCC: 多版本并发控制
            自动创建一个当前事务集的快照

    死锁:
        两个或多个事务在同一资源相互占用,并请求锁定对方占用的资源的状态;

    事务日志:
        事务日志的写入类型为“追加”,因此其操作为“顺序IO”;此日志通常也被称为“预写式日志(write ahead logging)”;
        日志文件大小相同,

技术图片

        mysql> SHOW GLOBAL VARIABLES LIKE ‘innodb%‘;  (不支持运行修改,需要配置文件中修改,并重启mysql服务)
            innodb_log_buffer_size          #日志缓冲大小
            innodb_log_file_size            #日志文件大小   (事务日志不要过大)
            innodb_log_files_in_group       #同一日志组中的文件数量
            innodb_log_group_home_dir       #日志文件存放路径
        不建议使用混合引擎。

以上是关于MySQL事务的主要内容,如果未能解决你的问题,请参考以下文章

基础-事务

理解片段事务期间片段的生命周期方法调用

提交带有全屏片段的片段事务

使用 OnItemClickListener 列出视图片段到片段事务

Android中的片段事务问题

Android从后台堆栈中删除事务