【问题标题】:Can a primary key contain more than one columns? [duplicate]主键可以包含多个列吗? [复制]
【发布时间】:2011-05-31 19:50:26
【问题描述】:

可能重复:
is this possible to made two primary key in one table

是否可以在 MySQL 中的多个列上定义主键?

这在create table 语句中是如何表示的?

【问题讨论】:

  • @Michael Todd:问题的意图似乎完全不同,不能重复,我意识到链接问题的已接受答案的一部分确实涉及与此处提出的相同问题。
  • @Michael:感到沮丧?
  • 不。只是想确保一个干净的网站。

标签: sql


【解决方案1】:

是的,你绝对可以。

这是一个链接:

http://sqlzoo.net/howto/source/z.dir/tip241027/mysql

这是基本语法:

CREATE TABLE myTable(
myCol1 INTEGER  NOT NULL,
myCol2 CHAR(10) NOT NULL,
myCol3 INTEGER NOT NULL,
myCol4 CHAR(1),
PRIMARY KEY (myCol1 , myCol2 , myCol3 )
)

【讨论】:

    【解决方案2】:

    你可以使用:

    CREATE TABLE tableName (
    firstName varchar(10) NOT NULL,
    surname varchar(20) NOT NULL,
    primary key(firstName,surname)
    );
    

    我个人在使用查找表连接多对多字段时使用这种结构:

    CREATE TABLE personPhoneNumbersLookup (
    personID int(3) NOT NULL,
    phoneNumberID int(4) NOT NULL,
    primary key(personID,phoneNumberID)
    );
    

    为了确保我只将一个特定的人连接到一个特定的电话号码一次。不过,很明显,同一个personID 可以用于其他电话号码,并且可以将多个电话号码连接到同一个人。

    【讨论】:

    • 非常聪明!并且内容丰富。谢谢
    【解决方案3】:

    是的,可以
    CREATE TABLE table1(col1 INT NOT NULL, col2 INT NOT NULL, PRIMARY KEY(col1,col2));

    更新
    这是可能的,但我不建议过度使用 mysql INNODB 表的复合主键。对于INNODB 引擎,主键也是一个聚集索引,它定义了行数据的物理位置。作为 PK 一部分的任何列的频繁更改都会导致外部碎片,从而导致性能下降。两列上的唯一键会更好。
    当然,当你实现多对多关系时,复合 PK 是一个不错的选择

    【讨论】:

    • +1 同样适用于 SQL Server - 默认情况下,主键是集群键,它应该是窄的和静态的 - 并不总是给定的复合键。另外:复合键使加入一个混乱的业务 - 我尽量避免它
    【解决方案4】:

    正如其他人所说...是的,您可以...但是,在许多系统中,表将具有“代理”自动增量键,这将是您的“主要”并在大多数情况下用于您的联接...这是为了防止 MyCol1、MyCol2、MyCol3 和 FirstName、SurName 等其他数据在其他表中重复。

    此外,您可以拥有一个“候选”键,它是除了您的主表之外的表的唯一索引,例如防止重复条目,或出于“查找”目的。通过一个人的名字进行查找是一回事。然后,当您拥有他们的“代理”ID 时,这就是将在系统中其他地方使用的密钥... 例如:您会找到多少次具有完全不相关条目的“鲍勃史密斯”... 但是 ID #3892位于 123 Anyplace 的“Bob Smith”不同于位于 983 Wrong Street 的 ID#28928“Bob Smith”。

    【讨论】:

      猜你喜欢
      • 2010-12-17
      • 1970-01-01
      • 2021-04-13
      • 2019-02-19
      • 1970-01-01
      • 2014-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多