MySQL。同一字段的 UNIQUE 和 PRIMARY KEY 约束
MySQL. UNIQUE and PRIMARY KEY constraints for the same field
我发现了一些遗留代码,它为主键字段设置了两个几乎相同的约束(UNIQUE
和 PRIMARY KEY
)。
这是代码示例:
CREATE TABLE foofoo (
id NUMERIC(9) NOT NULL ,
bar VARCHAR(40) NOT NULL,
CONSTRAINT PK_foofoo PRIMARY KEY (id),
CONSTRAINT UNIQUE_foofoo UNIQUE(id)
)
我认为设置这两个是多余的,PRIMARY KEY
就可以了。
当然,我阅读了这两个约束之间的区别,但是
为同一个字段设置这两个约束有什么意义?
设置与 PK 完全相同的约束没有意义。
主键已经在确保该列是唯一的并且已编入索引。
这样做没有意义。主键本质上始终是唯一的。我建议不要同时创建这两个索引,因为索引是有代价的(主要是磁盘 space)。创造PK就好了!
I think it's redundant ...
是的,确实是多余的;因为无论如何在列上具有主键约束将确保该列只有唯一值。在同一列上定义额外的 UNIQUE
约束没有意义。
当您声明主要时:
*PRIMARY KEY 约束唯一标识数据库中的每条记录 table
*主键必须包含唯一值
所以他们不需要声明主键是唯一的,因为每当你声明任何主键时, UNIQUE 值已经附加在他们身上。
对于唯一键:
*UNIQUE 约束唯一标识数据库中的每条记录 table。
*UNIQUE 和 PRIMARY KEY 约束都为一列或一组列的唯一性提供了保证。
*PRIMARY KEY 约束自动定义了一个 UNIQUE 约束。
最重要的一点是
*请注意,每个 table 可以有多个 UNIQUE 约束,但每个 table 只能有一个 PRIMARY KEY 约束。
在 mysql 中,当我使用相同的主键和 Unique 时,它给了我错误
我发现了一些遗留代码,它为主键字段设置了两个几乎相同的约束(UNIQUE
和 PRIMARY KEY
)。
这是代码示例:
CREATE TABLE foofoo (
id NUMERIC(9) NOT NULL ,
bar VARCHAR(40) NOT NULL,
CONSTRAINT PK_foofoo PRIMARY KEY (id),
CONSTRAINT UNIQUE_foofoo UNIQUE(id)
)
我认为设置这两个是多余的,PRIMARY KEY
就可以了。
当然,我阅读了这两个约束之间的区别,但是
为同一个字段设置这两个约束有什么意义?
设置与 PK 完全相同的约束没有意义。
主键已经在确保该列是唯一的并且已编入索引。
这样做没有意义。主键本质上始终是唯一的。我建议不要同时创建这两个索引,因为索引是有代价的(主要是磁盘 space)。创造PK就好了!
I think it's redundant ...
是的,确实是多余的;因为无论如何在列上具有主键约束将确保该列只有唯一值。在同一列上定义额外的 UNIQUE
约束没有意义。
当您声明主要时: *PRIMARY KEY 约束唯一标识数据库中的每条记录 table *主键必须包含唯一值 所以他们不需要声明主键是唯一的,因为每当你声明任何主键时, UNIQUE 值已经附加在他们身上。 对于唯一键: *UNIQUE 约束唯一标识数据库中的每条记录 table。 *UNIQUE 和 PRIMARY KEY 约束都为一列或一组列的唯一性提供了保证。 *PRIMARY KEY 约束自动定义了一个 UNIQUE 约束。 最重要的一点是 *请注意,每个 table 可以有多个 UNIQUE 约束,但每个 table 只能有一个 PRIMARY KEY 约束。 在 mysql 中,当我使用相同的主键和 Unique 时,它给了我错误