【问题标题】:How can I make a key pair primary?如何使密钥对成为主要密钥对?
【发布时间】:2012-01-12 16:02:30
【问题描述】:
我有一个不需要特定字段作为主键的表。我可以添加一个自增 ID 字段,但它根本不会在数据库查询中使用...
我也可以将唯一键设置为主键吗?
UNIQUE KEY 由两个配对的字段组成:
a VARCHAR(64) NOT NULL,
b VARCHAR(64) NOT NULL,
UNIQUE KEY uk_ab(a,b)
【问题讨论】:
标签:
php
mysql
database
database-design
【解决方案1】:
不确定这是否可行...
PRIMARY KEY uk_ab(a,b)
【解决方案2】:
当然(不需要UNIQUE KEY):
PRIMARY KEY (a, b)
看看documentation:
PRIMARY KEY 是一个唯一索引,其中所有键列都必须定义为 NOT NULL。如果它们没有显式声明为NOT NULL,MySQL 会隐含地(并且默默地)声明它们。一张表只能有一个PRIMARY KEY。 PRIMARY KEY 的名称始终为 PRIMARY,因此不能用作任何其他类型索引的名称。
和
PRIMARY KEY 可以是多列索引。但是,您不能使用列规范中的 PRIMARY KEY 键属性创建多列索引。这样做只会将该单列标记为主要列。您必须使用单独的PRIMARY KEY(index_col_name, ...) 子句。
【解决方案3】:
如果您的表已经有唯一约束,那么您需要添加主键 (ALTER TABLE [table_name] ADD CONSTRAINT [constraint_name] PRIMARY KEY (a,b)),并删除现有的唯一约束。否则,您将在同一列上有 2 个唯一索引。
如果创建新表,请使用PRIMARY KEY(a,b),而不是其他人建议的UNIQUE(a,b)。