Code前端首页关于Code前端联系我们

PostgreSQL 事务和命令示例的性质和控制

terry 2年前 (2023-09-26) 阅读数 44 #数据库

事务是在数据库上执行的工作单元。事务是按逻辑顺序完成的工作单元或工作序列,可以由用户手动完成,也可以由某些数据库程序自动完成。

交易的性质

交易有以下四个标准属性,一般用缩写表示 ACID缩写:

  • 缩写:♾原子性:工作单元操作完成成功;否则,失败点的事务将被中止,并且之前的操作将回滚到之前的状态。
  • 一致性:确保数据库在成功提交事务后正确更改状态。
  • 隔离:允许事务独立工作并且彼此透明。
  • 持久性(Durability):确保已确认交易的结果或影响在系统出现故障时仍然存在。

事务控制

以下命令用于控制事务:

  • START TRANSACTION:启动事务。
  • COMMIT:保存更改,或者您可以使用命令END TRANSACTION
  • ROLLBACK:撤消更改。

事务控制语句仅用于 DML 语句 INSERTUPDATE 和 和 DELE 在创建或删除表时不能使用它们,因为这些操作会在数据库。

BEGIN TRANSACTION命令:

您可以使用命令BEGIN TRANSACTION 或简单命令BEGIN来启动事务。这样的事务通常会持续到遇到下一个命令 COMMITROLLBACK。但如果数据库宕机或者发生错误,事务也会ROLLBACK

以下是启动/启动事务的简单语法:

BEGIN;

or

BEGIN TRANSACTION;
SQL

COMMIT 语句

COMMIT 是一个事务语句,用于保存事务所做的更改。命令
COMMIT 将自上次 COMMIT 以来的所有事务提交到数据库
命令的语法 COMMIT
如下如下: ROLLBACK命令命令 ROLLBACK命令未用于恢复存储在数据库中的事务❙ ROLLBACK。 COMMITROLLBACK 命令只能用于撤消自上次发出 COMMIT‼❝ciu‼‼ 命令以来的事务。命令
ROLLBACK 的语法如下:

ROLLBACK;
SQL

示例 ❀NY‼❙❙‼ 考虑一个包含以下记录的 表:
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
SQL

现在我们从交易开始,删除表中age = 25的记录,最后使用命令ROLLBACK恢复所有更改。

yiibai_db=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
ROLLBACK;
SQL

如果您再次查看表COMPANY,您仍然应该看到以下记录:

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
SQL现在开始另一个事务,表 = 25
和 最后使用命令 COMMIT 提交所有更改。

yiibai_db=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
COMMIT;
SQL

如果您查看表COMPANY,您应该会看到删除后的剩余记录:

 id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  3 | Teddy |  23 | Norway     |  20000
  5 | David |  27 | Texas      |  85000
  6 | Kim   |  22 | South-Hall |  45000
  7 | James |  24 | Houston    |  10000
(5 rows)

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门