是否可以在一个表中创建两个主键?

时间:2010-09-22 07:45:45

标签: mysql

您好我想知道是否可以在MySQL的一个表中创建两个主键。如果是这样,请解释这背后的概念。我问,因为我看过一个表,其中有两个主键没有设置自动增量。

6 个答案:

答案 0 :(得分:8)

您只能拥有1个主键,但是:

  • 你可以将多个专栏组合成主键(也许这就是你所看到的)
  • 主键不需要是自动增量,只需要是唯一的
  • 您可以为一个或多个列添加多个索引以加速SELECT语句(但减慢INSERT / UPDATE)
  • 这些索引可以标记为唯一,这意味着它们不允许您在索引字段中插入具有相同内容的第二行(就像主键一样)

答案 1 :(得分:4)

http://dev.mysql.com/doc/refman/5.1/en/create-table.html

  

[...]一个表只能有一个PRIMARY KEY。 [...]

答案 2 :(得分:3)

不,但除了PRIMARY KEY之外,您还可以在表上添加其他UNIQUE索引。 UNIQUE + NOT NULL与主键基本相同。

您所看到的可能是复合主键(构成唯一键的多个列)。

答案 3 :(得分:2)

使用复合主键...

e.g。

CREATE TABLE table1 ( 
   first_id int unsigned not null, 
   second_id int unsigned not null auto_increment, 
   user_id int unsigned not null, 
   desc text not null, 
PRIMARY KEY(first_id, second_id));

另外,请查看示例here

答案 4 :(得分:1)

您可以通过以下方式为主键使用多个列:

CREATE TABLE
    newTable
    ( field1 INT(11)
    , field2 INT(11)
    , field3 VARCHAR(5)
    , field4 BLOB
    , PRIMARY KEY (field2, field1, field3)   <====
    )

答案 5 :(得分:1)

表可以有一个PRIMARY键,可以包含一个或多个列。表也​​可以在其上定义许多附加键,作为UNIQUE KEY约束。

从您的描述中不清楚您是在查看定义了多个键的表,还是使用多列PRIMARY KEY的表。