一次旅行中的PostgreSQL交易

时间:2017-10-10 03:10:14

标签: php postgresql pdo

在我非常不成熟的PostgreSQL v8.4.13数据库中,ABA.aSERIAL PRIMARY KEY FOREIGN KEY B.a {1}}。两个表中都有其他列。 aUNIQUE B

在一个交易的范围内,我想向A添加一行,向B添加一行。

我正在使用PHP PDO为PGL编写脚本。

是否有可能在一次往返中做这样的事情?

在一次往返中,是否可以对多行​​进行B

2 个答案:

答案 0 :(得分:1)

您可以使用INSERT ... RETURNING语句检索SERIAL新生成的A.a值,并使用CTE打包INSERT在同一声明中:

WITH Inserted AS (
  INSERT INTO A (data)
  VALUES ('data')
  RETURNING A.a
)
INSERT INTO B (a, data)
SELECT Inserted.a, 'more data'
FROM Inserted;

如果要在B中插入多个记录,可以填写VALUES表达式中的其余字段,并加入A.a的{​​{1}}值}:

INSERT

答案 1 :(得分:-1)

只要更新到同一个数据库,每个事务就可以执行多次执行:

$dbh->beginTransaction();
$dbh->exec("UPDATE A SET last = 'hi'");
$dbh->exec("UPDATE B SET name = 'Rafael'");
/* MULTIPLE EXECS HERE */
$dbh->commit();