我有一个列名为
sort_order
的列,它有一个唯一约束条件。
以下SQL在Postgres 9.5上失败:UPDATE test
SET sort_order = sort_order + 1;
-- [23505] ERROR: duplicate key value violates unique constraint "test_sort_order_key"
-- Detail: Key (sort_order)=(2) already exists.
显然,如果在更新前sort_order
的值是唯一的,那么更新后它们仍将保持唯一。为什么呢?
在Oracle和MS SQL上相同的语句可以正常工作,但在MySQL和SQLite上会失败。
下面是SQL Fiddle的完整设置代码:
DROP TABLE IF EXISTS test;
CREATE TABLE test (
val TEXT,
sort_order INTEGER NOT NULL UNIQUE
);
INSERT INTO test
VALUES ('A', 1), ('B', 2);
IMMEDIATELY
的含义有不同的想法”。这是在检查唯一约束条件的实现中与标准文档记录的差异。 - ypercubeᵀᴹ