在我非常不成熟的PostgreSQL v8.4.13数据库中,A
和B
列A.a
,SERIAL PRIMARY KEY
FOREIGN KEY
B.a
{1}}。两个表中都有其他列。 a
中UNIQUE
不 B
。
在一个交易的范围内,我想向A
添加一行,向B
添加一行。
我正在使用PHP PDO为PGL编写脚本。
是否有可能在一次往返中做这样的事情?
在一次往返中,是否可以对多行进行B
?
答案 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();