zoukankan      html  css  js  c++  java
  • PostgreSQL学习笔记——事务

    • 事务时需要在同一处理单元中执行的一系列更新处理的集合。通过使用事务,可以对数据库中的数据更新处理的提交和取消进行管理。
    • 事务处理的终止指令包括COMMIT(提交处理)和ROLLBACK(取消处理)两种。
    • DBMS的事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)四种特性,统称为ACID特性。

    举个例子,比如你在一个销售部门工作,这个时候领导分配给你一个工作:
    “zifeiy,我们决定把运动T恤的销售单价下调100元,同时把T恤衫的销售单价上浮100元,麻烦你去更新一下数据库。”

    那么其实这么一个任务中时包含两个步骤的:

    1. 将运动T恤的销售单价降低100元:
    UPDATE Product
        SET sale_price = sale_price - 100
    WHERE product_name = '运动T恤';
    
    1. 将T恤衫的销售单价上浮100元:
    UPDATE Product
        SET sale_price = sale_price + 100
    WHERE product_name = 'T恤衫';
    

    上述连个操作要作为同一个处理单元执行。
    也就是说:“要么都执行,要么都不执行。”
    遇到这种需要在同一个处理单元中执行一系列更新操作的情况,一定要使用事务来进行处理。

    创建事务

    如果想在DBMS中创建事务,可以按照如下语法结构编写SQL语句:

    事务开始语句;
    
    DML语句1;
    DML语句2;
    DML语句3;
    ……
    
    事务结束语句(COMMIT或者ROLLBACK);
    

    使用事务开始语句和事务结束语句,将一系列DML语句(INSERT/UPDATE/DELETE语句)括起来,就实现了一个事务处理。

    事务的开始语句在不同的DBMS中有区别:

    • SQL Server、PostgreSQL:BEGIN TRANSACTION
    • MySQL:START TRANSACTION
    • Oracle、DB2: 无

    在PostgreSQL中更新商品信息的事务:

    BEGIN TRANSACTION;
    
        -- 将运动T恤的销售单价降低100元
        UPDATE Product
            SET sale_price = sale_price - 100
        WHERE product_name = '运动T恤';
        -- 将T恤衫的销售单价上浮100元
        UPDATE Product
            SET sale_price = sale_price + 100
        WHERE product_name = 'T恤衫';
    
    COMMIT;
    
    • COMMIT:提交处理
      • COMMIT的流程 = 直线进行
    • ROLLBACK:取消处理
      • ROLLBACK的流程 = 掉头回到起点

    事务回滚的例子:

    BEGIN TRANSACTION;
    
        -- 将运动T恤的销售单价降低100元
        UPDATE Product
            SET sale_price = sale_price - 100
        WHERE product_name = '运动T恤';
        -- 将T恤衫的销售单价上浮100元
        UPDATE Product
            SET sale_price = sale_price + 100
        WHERE product_name = 'T恤衫';
    
    ROLLBACK;
    

    上述事务处理执行之后,表中的数据不会发生任何改变。这是因为执行最后一行的ROLLBACK之后,所有的处理都被取消了。因此,回滚执行起来就无需像提交时那样小心翼翼了(即使是想要提交的情况,也只需要重新执行事务就可以了)。

  • 相关阅读:
    C++引用小结
    C++关于const的使用以及理解
    python购物车程序的简单程序优化版
    C++文件操作
    python购物车简单小程序
    python学习DAY3(列表)
    C++重载双目运算符(2)(对象与数之间)
    C++重载双目运算符(1)(对象与对象之间)
    C++重载单目运算符
    Elasticsearch 添加数据
  • 原文地址:https://www.cnblogs.com/zifeiy/p/9849574.html
Copyright © 2011-2022 走看看