day3

作者: db11eeb80aa7 | 来源:发表于2020-07-16 22:09 被阅读0次

    死锁

    指两个或多个事务在统一资源上相互占用,并请求锁定对方资源时,从而导致的恶性循环现象。
    (当两个事务同时执行了一条修改语句,更新了一条数据,同时也锁定了该行数据,接着每个事务去执行第二个修改语句时,发现该行数据已经被对方锁定,然后两个事务同时等待对方释放锁,又同时持有对方的锁,则陷入死循环,除非有外部因素介入,才可以解除死锁。)

    事务日志

    事务日志可以提高事务的效率。使用事务日志,存储引擎在修改表的数据时,只需要修改其内存拷贝,再把该修改行为记录到持久在硬盘上的事务日志中,不用每次都将修改的数据本身持久到磁盘。事务日志采用追加的方式。(预写式日志)事务日志持久以后,内存中被修改的数据可以慢慢刷回磁盘。
    如果数据的修改已经记录到事务日志并持久化,但数据本身还没有写会磁盘,此时系统崩溃,存储引擎在重启时能够自动恢复这部分数据。

    MySQL中的事务

    MySQL提供了两种事务型存储引擎
    1.InnoDB
    2.NDB Cluster

    自动提交

    MySQL默认采用自动提交模式。如果不是显式的开始一个事务,则每个查询都被当做一个事务执行提交操作。

    表分为事务型表和非事务型表。例如(InnoDB和MyISAM表)

    MySQL的服务层不管理事务,存储引擎管理事务。所以在同一个事务中,无法使用多种存储引擎。
    如果在事务中使用混合使用事务型和非事务型表,正常情况下不会出现什么问题,但是当事务需要回滚时,非事务型表数据修改之后,无法进行回滚。
    非事务型表,在执行事务操作时,MySQL通常不会做出提醒,只有在发生回滚时才会做出警告。

    InnoDB

    1.隐式锁定

    InnoDB采用两阶段锁定协议,在事务的执行过程中,随时都可以执行锁定,锁只有在提交和回滚时才会释放,并且所有的锁都是在同一时间被释放。InnoDB会根据隔离级别在需要的时候自动加锁。

    2.显式锁定

    InnoDB也支持通过特定的语句进行显式锁定。
    MySQL也支持LOCK TABLES(锁定表) UNLOCK TABLES(解锁表),但是并不能代替事务。

    相关文章

      网友评论

          本文标题:day3

          本文链接:https://www.haomeiwen.com/subject/aqomhktx.html