📜  PostgreSQL – 事务

📅  最后修改于: 2022-05-13 01:57:05.021000             🧑  作者: Mango

PostgreSQL – 事务

交易不是我们听到的新词。我们多次听到这个词,比如“现金交易”。银行通常处理现金,即发送或接收现金,因此我们将这个术语称为现金交易。所以简单的事务是一个工作单元。在本文中,我们将学习 PostgreSQL 数据库语言中的事务。

事务在任何数据库语言中都很重要,每当我们想要添加、删除和更新时,事务都用于保持数据的完整性和其他几个原因。即使没有事务,我们也可以添加、删除和更新数据库,但由于数据完整性丢失,数据被纠正的可能性非常大。

事务的属性

现在让我们看看事务的 ACID 属性:

  • 原子性——该属性确保所有事务都是完整的。它遵循 all or none 属性,即事务不应部分完成。
  • 一致性——此属性确保所有事务都是一致的,即在提交事务后,这些更改是否在数据库中正确更新。
  • 隔离——当两个事务运行时,两个事务都有自己的隐私,即一个事务不会干扰另一个事务。
  • 持久性——此属性确保即使在系统发生故障时,数据库中提交的数据也是安全的,即永久的。

事务中的命令

事务块中有三个主要命令。他们是:

  1. 开始
  2. 犯罪
  3. 回滚

一般语法:

BEGIN;

// set of statements

[COMMIT | ROLLBACK];

现在我们将了解每个事务控制命令的重要性,为此,我们必须先在数据库中建立一个表。

CREATE TABLE BankStatements (
    customer_id serial PRIMARY KEY,
    full_name VARCHAR NOT NULL,
    balance INT
);

由于数据库模式现在已经准备好,我们将在其中插入一些值。

INSERT INTO BankStatements (
    customer_id ,
    full_name,
    balance
)
VALUES
    (1, 'Sekhar rao', 1000),
    (2, 'Abishek Yadav', 500),
    (3, 'Srinivas Goud', 1000);

1. 开始

BEGIN命令用于启动事务。要启动一个事务,我们应该首先给出 BEGIN 命令,如果我们不这样给出它,那么数据库就无法识别该事务。

示例 1

BEGIN;

 INSERT INTO BankStatements (
     customer_id,
    full_name,
        balance

)
    VALUES(
       4, 'Priya chetri', 500
        )
;
        
COMMIT;

输出

2. 提交

每当我们显示所需的数据时, COMMIT命令用于保存更改并将它们反映在数据库中。假设我们更新了数据库中的数据但我们没有提交 COMMIT 那么这些更改不会反映在数据库中。要保存在事务中所做的更改,我们应该确定地提交该事务。

示例 2

BEGIN;

    UPDATE BankStatements
        SET balance = balance - 500
        WHERE 
        customer_id = 1;
      

    SELECT customer_id, full_name, balance
        FROM BankStatements;
      
    UPDATE BankStatements
        SET balance = balance + 500
        WHERE 
        customer_id = 2;
 
      
COMMIT;


SELECT customer_id, full_name, balance
    FROM BankStatements;
    

输出:

3. 回滚

ROLLBACK命令用于撤消事务中所做的更改。正如我们所知,数据库语言中的事务用于大型计算,例如在银行中。假设银行员工错误地增加了错误人的余额记录,那么他可以简单地回滚并回到之前的状态。

示例 3

BEGIN;

    DELETE FROM BankStatements
        WHERE 
        customer_id = 1;
      

    SELECT customer_id, full_name, balance
        FROM BankStatements;
      

ROLLBACK;


SELECT customer_id, full_name, balance
    FROM BankStatements;

输出: