Ric*_*way 2 sql postgresql database-design unique-constraint
我在 Postgres 数据库中有一个现有的表,该表累积了重复值。我们已清除表并重新填充值,但希望防止再次发生重复。因此我们需要 a 来添加约束。
表名:camembert,样本数据:
| handle | id | num |
| ------ | --- | ----- |
| 259 | 869 | AC003 |
| 259 | 869 | AC003 |
| 259 | 869 | AC003 |
| 259 | 856 | AC005 |
| 259 | 856 | AC005 |
| 259 | 856 | AC005 |
etc.
Run Code Online (Sandbox Code Playgroud)
下面是这个问题的一个例子(我们实际上有所有东西的三份)
该约束应允许前两列具有重复值,但是,第三列是使该行唯一的区别因素。例如,当表被正确填充后,它看起来如下:
| handle | id | num |
| ------ | ----- | ----- |
| 259 | 869 | AC003 |
| 259 | 856 | AC005 |
| 259 | 856 | AC007 |
| 47138 | 41085 | AC003 |
| 47138 | 41085 | AC005 |
| 47138 | 43513 | AC007 |
Run Code Online (Sandbox Code Playgroud)
我尝试了以下脚本:
ALTER TABLE camembert ADD CONSTRAINT num_uniq UNIQUE (num);
Run Code Online (Sandbox Code Playgroud)
但出现错误:
Run Code Online (Sandbox Code Playgroud)ERROR: could not create unique index "num" Detail: Key (num)=(AC003) is duplicated.
我对唯一约束有什么误解?解开这个谜题的关键语句是什么?
您必须将 3 列的约束添加在一起
ALTER TABLE camembert ADD CONSTRAINT num_vals UNIQUE (handle, id, num);
Run Code Online (Sandbox Code Playgroud)
但在此之前,您必须删除重复的内容。
| 归档时间: |
|
| 查看次数: |
4444 次 |
| 最近记录: |