zoukankan      html  css  js  c++  java
  • 事务及其四大特性

    1、什么是事务

    数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的 一系列操作,要么完全地执行,要么完全地不执行。
    简单的说:事务就是将一堆的SQL语句(通常是增删改操作)绑定在一起 执行,要么都执行成功,要么都执行失败,即都执行成功才算成功,否则 就会恢复到这堆SQL执行之前的状态。

    2、事务的四大特性

    已转账为例

    一、原子性

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

    即:事务中所有操作是不可再分割的原子单位。事务中所有操作要么 全部执行成功,要么全部执行失败。

    二、一致性

    在事务开始之前和事务结束以后,数据库 的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则, 这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工 作。

    例如:转账业务,无论事务执行成功与否,参与转账的两个账户金额 之和在事务前后应该是保持不变的。

    三、隔离性

    数据库允许多个并发事务同时对其数据进行 读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而 导致数据的不一致。即:隔离性可以在事务并发时,让不同的事务隔离开 来,一个事务看不到另一个事务正在进行中的状态。

    例如:在A事务中,查看另一B事务(正在修改张三的账户金额)中张三的 账户金额,要查看到B事务之前的张三的账户金额,要么查看到B事务之后 张三的账户金额。

    1 事务1: 查询A、B账户金额之和 
    2 事务2: A转账给B 500元   
    3 A - 500 = 500    
    4 B + 500 = 1500

    四、持久性

    事务处理结束后,对数据的修改就是永久 的,即便系统故障也不会丢失。因为事务一旦提交,事务中所有的数据操 作都必须被持久化到数据库中,即使事务提交后,数据库马上崩溃,在数 据库重启时,也必须能保证通过某种机制恢复数据。

    开启事务---A给B转账500元 
    A: 1000 - 500 = 500 (成功了) -- 在日志中记录,事务成功,A账户金额 更新为500
    B: 1000 + 500 = 1500 (成功了)  -- 在日志中记录,事务成功,B账户金 额更新为1500 
    结束事务---回滚/提交
  • 相关阅读:
    详解Go变量类型的内存布局
    saltstack手册(含官方pdf)
    Linux之《荒岛余生》(三)内存篇
    linux之网络
    Linux之IO
    【WPF】提高InkAnalyer手写汉字识别的准确率
    mssql 小技巧
    WCF Data Service
    jQuery基础之选择器
    Window程序的安装与部署
  • 原文地址:https://www.cnblogs.com/houyu/p/14135067.html
Copyright © 2011-2022 走看看