我想知道 PostgreSQL 多行 INSERT
是否安全(在系统/数据库发生故障时插入所有数据或不插入任何数据)。查询示例:
INSERT INTO "tests" ("name") VALUES ('1'), ('2')
最佳答案
您自己的回答(现已删除)是对事物的误解。单个 INSERT
语句始终是原子的。您的示例 INSERT
有两行是全有或全无 - 两行都被插入或没有。
是否启用自动提交取决于您的客户端。
在 psql 中默认启用自动提交。这意味着每个 statement 都作为自己的事务运行,除非您将(任意数量的)语句包装到显式事务包装器中。所以这是“全有或全无”:
INSERT INTO test (name) VALUES ('1'), ('2');
就像这样:
BEGIN;
INSERT INTO test (name) VALUES ('1');
INSERT INTO test (name) VALUES ('2');
COMMIT;
但不是这个:
INSERT INTO test (name) VALUES ('1');
INSERT INTO test (name) VALUES ('2');
在 pgAdmin 中,您从查询窗口立即发送的所有内容默认都包装到事务中。
关于database - PostgreSQL 多行插入是全有还是全无?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29357784/