zoukankan      html  css  js  c++  java
  • 高性能MySQL——事务

    1、事务的ACID特性

    ACID,是指在数据库管理系统DBMS)中事务所具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

    在数据库系统中,一个事务是指由一系列数据库操作组成的一个完整的逻辑过程。例如银行转帐,从原账户扣除金额,以及向目标账户添加金额,这两个数据库操作的总和构成一个完整的逻辑过程,不可拆分。这个过程被称为一个事务,具有ACID特性。

    原子性:

    整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

    比如说,一个事务开始更新100行记录,但是在更新了20行之后(因为某种原因)失败了,那么此时数据库会回滚(撤销)对那20条记录的修改。

    一致性:

    在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

    事务将数据库从一个一致性状态带入另一个一致性状态。 比如说,在一个银行事务(在描述关系数据库事务的特性时,基本上都是用银行事务来作为描述对象的)中,需要从存储账户扣除款项,然后在支付账户中增加款项。 如果在这个中转的过程发生了失败,那么绝对不能让数据库只执行其中一个账户的操作,因为这样会导致数据处于不一致的状态(这样的话,银行的账目上,借贷就不平衡了)。

    如果数据库系统运行中发生故障,有些事物尚未完成就被迫中断了,系统就将此事务中对数据库的所有已经完成的操作全部撤销,滚回到事务开始时的一致状态。

    隔离性:

    两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。

    这个特性是说,直到事务结束时(commit/rollback),其他事务(或者会话)对此事务所操作的数据都不可见(但并不是说其他会话的读取会被阻塞)。 比如说,一个用户正在修改hr.employees表,但是没有提交,那么其他用户在这个修改没有提交之前是看不到这个修改的。

    持久性:

    在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

    指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。

    被提交的更改会永久地保存到数据库中(并不是说以后就不可以修改)。 事务提交之后,数据库必须通过“恢复机制”来确保事务更改的数据不会丢失。

    事务ACID特性可能遭到破坏的因素有:

    • 多个事务并行运行时,不同事物的操作交叉运行;
    • 事务在运行过程中被强行停止。

    事务的状态有如下几种:

    • 中止事务:执行中发生故障,不能执行完成的事务;
    • 事务回滚:将中止事务对数据库的更新撤销掉;
    • 已提交事务:成功执行完成的事务。

    2、事务的隔离级别

    • READ UNCOMMITTED(未提交读)——事务中的修改即使没有提交,对其他事务也是可见的;
    • READ COMMITTED(提交读)——一个事务开始时,只能看见已经提交的事务所做的修改(多数数据库的默认事务隔离级别);
    • REPEATABLE READ(可重复读)——该级别保证在同一事务中,多次读取同样记录的结果是一直的(可重复读是MySQL的默认事务隔离级别);
    • SERIALIZABLE(可串行化)——强制事务的串行执行,避免了幻读的问题。

    3、死锁

    死锁是指两个或多个事务在统一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。死锁发生后,只有部分或者完全回滚其中一个事务,才能打破死锁。

  • 相关阅读:
    PHP和数据库相关的事
    angular的学习进阶(十七)
    javascript原生技巧篇
    ScrollReveval.js 视差滚动的探索
    django 武沛齐老师-最后一篇随笔
    去除HTML中input[type="number"]的默认样式
    git push时报错 ssh: Could not resolve hostname origin: Name or service not known fatal: Could not read from remote repository.
    Heroku 免费容器服务申请,搭建 V2+CF 方法教程
    96000个「企业码」背后,余杭区政企数智化能量爆发
    数据生态的过去、现在和未来
  • 原文地址:https://www.cnblogs.com/zhuxiong/p/7795209.html
Copyright © 2011-2022 走看看