Postgres ERROR:重复键值违反唯一约束

时间:2012-02-11 19:08:50

标签: postgresql

表格定义

create table users (
serial_no integer PRIMARY KEY DEFAULT nextval('serial'),
uid bigint NOT NULL,
username varchar(32),
name text,
CONSTRAINT production UNIQUE(uid)
);

我使用了这个查询

INSERT INTO users (uid) values(123) ;

它表示重复键值违反了唯一约束。所以我用谷歌搜索了这个link

所以我试过

INSERT INTO users (uid) values(123) 
where 1 in (select 1 from users where uid = 123) ;

它在“WHERE”或附近说yntax错误。

如何使用insert子句使用where子句,这样当我使用php运行相同的查询时,它不会返回错误

列uid是唯一的

1 个答案:

答案 0 :(得分:5)

INSERT statement不支持WHERE子句。运行它。

create table test (
  n integer primary key
);

insert into test values (1);
insert into test values (2) where true;

由于WHERE子句,这会给你一个语法错误。

但是,

SELECT语句可以有一个WHERE子句。这将在测试表中插入2次。根据需要多次运行;它不会引发错误。 (但它最多只插入一行。)

insert into test (n) 
select 2 where 2 not in (select n from test where n = 2);

因此,假设您试图避免在重复键上引发错误,那么您的查询应该是这样的。

INSERT INTO users (uid) 
SELECT 123 WHERE 123 not in (SELECT uid FROM users WHERE uid = 123) ;