SQL插入AND更新

时间:2013-08-08 15:03:24

标签: sql postgresql insert-into

PostgreSQL中是否可以更新表并同时将数据插入另一个表中。

UPDATE table1
SET column4=true
AND INSERT into table2
SELECT column1, column2, column3
FROM table 1
WHERE column1="peter"
;

2 个答案:

答案 0 :(得分:2)

在Postgres 9.1或更高版本中,您可以使用以下内容:

WITH source AS (UPDATE table1
                SET column4=true
                WHERE column1='peter'
                RETURNING column1, column2, column3)
INSERT INTO table2 
SELECT column1, column2, column3
FROM source;

答案 1 :(得分:0)

您可以在事务中执行多个语句,因此它仍然是对数据的原子更改。

BEGIN;

UPDATE table1
SET column4=true;

INSERT into table2
SELECT column1, column2, column3
FROM table 1
WHERE column1="peter";

COMMIT;

如果由于某种原因插入失败,整个事务将失败,并且将撤消更改,包括在insert语句之前执行的更新。