重复键值违反了唯一约束,但不应该

时间:2013-12-19 16:39:28

标签: sql postgresql

我有两张桌子,一张叫“人”,另一张叫“结果”。

人员有身份证和球员名称。

结果有ID,玩家ID,分数和时间。

我认为结果中的“playerID”不应该是唯一的(因为同一个玩家可以有多个分数),但在执行此查询时,这似乎是合乎逻辑的:

insert into results (playerid, score, time) values
((select id from persons where playername = 'Dylan'),100,100);

我收到错误

ERROR:  duplicate key value violates unique constraint "results_playerid_key"
DETAIL:  Key (playerid)=(1) already exists.

这可能是数据库中的错误吗? (数据库由我所在大学的几位讲师管理,我无法更改任何设置。)

感谢您提供的任何见解。

2 个答案:

答案 0 :(得分:1)

尽管对你(以及对我而言)看似合乎逻辑,但对管理数据库的人来说这听起来并不合乎逻辑,因此他们将playerid的约束视为唯一。

也许出现了错误,他们想将id设置为自动增量主键?您是否至少可以调查架构以查看即使您无法更改它们,也会看到哪些约束?

数据库背后的想法很可能是每个玩家真的有一个结果,你知道可能存在于这个选择背后的业务或应用程序逻辑吗?

答案 1 :(得分:0)

您是否尝试将结果表中的外键重命名为非“playerid”(我使用的是player_id或player_no)?还要确保它是结果表中的数字,而不是设置为唯一值。