在本章中,我们将处理事务。 首先,我们提供一些基本定义。 然后,我们将使用事务的示例程序。
事务 是针对一个或多个数据库中数据的数据库操作的基本单位。 事务中的 SQL 语句可以全部提交给数据库,也可以全部回滚。 为了数据安全和完整性,将 SQL 语句放入事务中。
在 PostgreSQL PHP 中,每个 SQL 语句在执行后都会提交给数据库。 并非所有语言绑定都是如此。 例如,在 Python 的 psycopg2 模块中,默认情况下,必须使用commit()
方法显式提交所有更改。
在直接 SQL 中,事务以BEGIN TRANSACTION
语句开始,并以END TRANSACTION
和COMMIT
语句结束。 在 PostgreSQL 中,这些语句是BEGIN
和COMMIT
。 在某些驱动程序中,这些语句被省略。 它们由驾驶员处理。 在 PHP 中没有这样的方法,我们必须使用直接 SQL。 (在 PHP PDO 中有这样的方法。)
我们有汽车表。 我们要交换第一行和最后一行。 我们分两个步骤进行。 首先,我们删除两行。 然后,我们将其插入并交换 ID。 这两个操作需要放在事务中。 如果第一步成功而第二步失败,则数据将被破坏。 因此,我们需要全部完成或什么都不做。
我们通过发出 BEGIN 语句开始新的事务。
这是两个修改表的 SQL 语句。 两个pg_query()
函数都返回 true 或 false 布尔值,指示 SQL 命令是否失败。
如果两个函数调用都返回 true,则使用COMMIT
语句提交事务。 否则,我们将使用ROLLBACK
语句回滚更改。
行已成功交换。