Postgresql 专题
专题目录
您的位置:database > Postgresql专题 > PostgreSQL事务
PostgreSQL事务
作者:--    发布时间:2019-11-20

事务是对数据库执行的工作单元。事务是以逻辑顺序完成的工作的单位或顺序,无论是用户手动的方式还是通过某种数据库程序自动执行。

事务性质

事务具有以下四个标准属性,一般是由首字母缩写词acid简称:

  • 原子性(atomicity):确保工作单位内的所有操作成功完成; 否则事务将在故障点中止,以前的操作回滚到其以前的状态。
  • 一致性(consistency):确保数据库在成功提交的事务时正确更改状态。
  • 隔离性(isolation):使事务能够独立运作并相互透明。
  • 持久性(durability):确保在系统发生故障的情况下,提交的事务的结果或效果仍然存在。

事务控制

以下命令用于控制事务:

  • begin transaction:开始事务。
  • commit:保存更改,或者您可以使用end transaction命令。
  • rollback:回滚更改。

事务控制命令仅用于dml命令insertupdatedelete。 创建表或删除它们时不能使用它们,因为这些操作会在数据库中自动提交。

begin transaction命令:

可以使用begin transaction或简单的begin命令来开始事务。 这样的事务通常会持续下去,直到遇到下一个commitrollback命令。 但如果数据库关闭或发生错误,则事务也将rollback

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

begin;

or

begin transaction;

commit命令

commit命令是用于将事务调用的更改保存到数据库的事务命令。
commit命令自上次的commitrollback命令后将所有事务保存到数据库。
commit命令的语法如下:

commit;

or

end transaction;

rollback命令

rollback命令是用于还原尚未保存到数据库的事务的事务命令。自上次发出commitrollback命令以来,rollback命令只能用于撤销事务。
rollback命令的语法如下:

rollback;

示例

考虑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

现在,我们开始一个事务,并删除表中age = 25的记录,最后使用rollback命令撤消所有的更改。

h3_db=# begin;
delete from company where age = 25;
rollback;

如果再次查看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

现在,让我们开始另一个事务,并从表中删除age = 25的记录,最后使用commit命令提交所有的更改。

h3_db=# begin;
delete from company where age = 25;
commit;

如果查看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)

网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册