首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在mysql中使用两列作为主键?

在mysql中使用两列作为主键?
EN

Stack Overflow用户
提问于 2013-01-08 09:19:34
回答 5查看 58.3K关注 0票数 19

今天我发现你可以有一个使用两列的主键(tsql)。主键必须是唯一的,但两列都不是(组合必须唯一)。

我觉得这很酷。至少有两个问题,所以我问人们在哪里对我大喊大叫,说我的(mysql)数据库做得不好,只有一个人说我做得很好。所以..。这让我产生了一些疑问

这是否如我所想的那样呢?

create table User(
   id INT primary key AUTO_INCREMENT ,  
   ipaddr  TEXT  NOT NULL , 
   email  TEXT  NOT NULL
);
create table test(
  a  INT  NOT NULL ,
  b  INT  NOT NULL ,
  dummy  INT  NOT NULL ,
  FOREIGN KEY (a) REFERENCES User(id),
  FOREIGN KEY (b) REFERENCES User(id),
  PRIMARY KEY(a,b)
);

我运行了下面的代码,所以看起来我是在做我想做的事情(组合必须是唯一的。但列中的相同值不需要是唯一的)。我应该意识到一些事情吗?关于mysql,为什么没有人向我提及这一点,这肯定是有原因的?

mysql> insert into test(a,b,dummy) select 1,1,1;
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into test(a,b,dummy) select 1,2,2;
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into test(a,b,dummy) select 2,1,3;
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into test(a,b,dummy) select 2,2,4;
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into test(a,b,dummy) select 1,2,5;
ERROR 1062 (23000): Duplicate entry '1-2' for key 'PRIMARY'
EN

回答 5

Stack Overflow用户

发布于 2013-11-28 00:56:24

你的想法很好。我经常使用多字段主键,原因很简单,因为它使我的数据库设计更具逻辑性、可管理性和可读性。您可以将多字段主键视为具有唯一名称。例如:

多字段主键:

(First ,Middle, Last)

示例取值:

('Michael', 'A.', 'Kline')

可能有很多人的名字是'Michael‘和/或’中间‘名字’A‘。和/或‘’Last‘名字' Kline’,但就您的数据库而言,只能有一个'Michael A. Kline‘。

通常,多字段主键是来自其他表的其他主键的组合,记录内容描述与特定键值相关的内容。例如:

Table #1: Student Records (KEY: student_id)
Table #2: Course Records (KEY: course_id)
Table #3: Student Grades (KEY: student_id, course_id)

希望这能有所帮助。

票数 4
EN

Stack Overflow用户

发布于 2014-05-05 18:16:09

还有一件事需要注意:主键在MySQL中是自动索引的。正如前面提到的here,在主键中提到的列的顺序对性能很重要

票数 2
EN

Stack Overflow用户

发布于 2013-01-08 09:25:43

我相信正在发生的事情是成对的列在一起是主要的。例如,您知道不能有重复的主列Ex:如果col " a“是primary,则不能有两个行具有相同的值。

在本例中,您有两个主值;这意味着每个列对只能有一个唯一的值。例如,如果列'a‘和'b’是主要的,而'c‘不是: a|b|c 1,2,3作品1,4,5作品和5,1,6作品9,1,10作品

但是你不能有: 9,8,10 9,8,6,因为对于这(9,8)对,你只能有一个唯一的值...

这有意义吗?或者您想让我进一步详细说明?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14206868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档