技术开发 频道

PostgreSQL事务功能之客户端篇

  【IT168 技术文档】本系列文章文将介绍PostgreSQL的事务处理功能的基本概念,并讲解如何通过PostgreSQL客户端以及从PHP脚本内部来执行各种事务。通过本文,您将学习什么是事务,PostgreSQL是如何实现它们的,以及怎样在自己的PHP应用程序中如何使用事务。

  一、什么是事务?

  事务可以看作是一个数据库操作的有序集,这些操作应作为整体来对待,即集内所有的操作都成功的时候,该事务才被认为是成功的,否则的话,即使其中只有一个操作失败,该事务也会被认为是不成功。如果所有的操作全部成功,那么事务就会被提交,这时它的所作的修改才能被所有其他数据库进程所用。如果操作失败,该事务就会被回滚,同时事务内部所有已完成操作所做的修改会被全部撤销。在事务提交之前,一次事务期间所作的修改,只对拥有此事务的进程可用。之所以这样做,是为了防止其他线程使用了事务修改的数据后,事务随后又发生了回滚,从而导致数据完整性错误。

  事务功能是企业数据库的关键所在,因为许多业务流程是由多步组成的,下面我们以在线购物为例进行说明。在结帐时,顾客的购物车会跟现有库存进行比对,以确保有现货。接下来,顾客必须提供收费与交货信息,这时就需要检查相应的信用卡是否可用,并从中扣款。然后,需要从产品库存清单中扣除相应的数量,如果库存不足,还应向采购部门发出通知。在这些步骤中,只要有一步发生错误,那么所有修改都不应该生效。假设没有现货的情况下,还是从顾客的信用卡中扣了款的话,那么顾客会很生气,问题就会很严重了。同样地,作为在线商家,当信用卡无效的时候,您也肯定不希望从存货清单中扣除此次顾客选择的商品数量,或者因此而发出相应的采购通知。

  我们这里所说的事务,必须满足四大要件:

  l 原子性:事务所有的步骤必须全部成功;否则,任何步骤都不会被提交。

  l 一致性:事务所有的步骤必须全部成功;否则,所有的数据都会恢复到事务开始之前的状态。

  l 隔离性:在事务完成之前,所有已执行的步骤必须与系统保持隔离。

  l 持久性:所有提交的数据,系统必须加以恰当保存,并保证万一系统发生故障时仍能将数据恢复到有效状态。

  PostgreSQL的事务支持功能完全遵循上述四项基本原则(有时候人们简称为ACID),从而能够有效保证数据库的完整性。

0
相关文章