2011-12-04 62 views
3

我有表不需要特定的字段作为主键。我可以添加一个自动增量ID字段,但在数据库查询中根本不会使用它...如何制作密钥对?

我可以让一个唯一的KEY为主吗?

唯一的密钥由配对在一起的两个领域:

a VARCHAR(64) NOT NULL, 
b VARCHAR(64) NOT NULL, 
UNIQUE KEY uk_ab(a,b) 

回答

6

当然(无需UNIQUE KEY):

PRIMARY KEY (a, b) 

看看documentation

A PRIMARY KEY是一个唯一索引,其中所有关键字列必须定义为NOT NULL。如果它们没有被明确声明为NOT NULL,MySQL会隐式(并且默默)声明它们。一张桌子只能有一个PRIMARY KEYPRIMARY KEY的名称始终为PRIMARY,因此不能用作任何其他类型索引的名称。

PRIMARY KEY可以是多列索引。但是,您无法使用列规范中的PRIMARY KEY关键属性创建多列索引。这样做只会将单个列标记为主要列。您必须使用单独的PRIMARY KEY(index_col_name, ...)子句。

1

不知道这是否会工作......

PRIMARY KEY uk_ab(a,b) 
1

如果你的表已经有一个唯一的约束,那么你需要添加主键(ALTER TABLE [table_name] ADD CONSTRAINT [constraint_name] PRIMARY KEY (a,b)),并删除现有的唯一约束。否则,您将在同一列上有两个唯一索引。
如果您创建一个新表,请使用PRIMARY KEY(a,b)而不是其他人提议的UNIQUE(a,b)