两列作为mysql的主键?

18 mysql

今天我发现你可以使用两列(tsql)来获得主键.PK必须是唯一的,但两列都不是(组合必须是唯一的).

我觉得这很酷.至少有两个问题,我问过人们在哪里大吼我说我做的(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)
);
Run Code Online (Sandbox Code Playgroud)

我跑了下面所以看起来我正在做我认为(组合必须是唯一的.但是列中的相同值不需要是唯一的).我应该知道什么吗?关于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'
Run Code Online (Sandbox Code Playgroud)

Boh*_*ian 31

你在想这个:

  • 主键(无论涉及多少列)必须是唯一的
  • 你的主键是两列a,b

因此,A和B 在一起,必须是唯一的.

a和b的个体价值无关紧要.

  • 好吧,我只是想确保我不会落后于我.相反,然后人们向我大喊两个问题并告诉我添加一个名为id的int列他们可以建议这个并且没有人做过:x (2认同)

Dev*_*ard 1

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

在此示例中,您有两个初选;这意味着每一列对只能有一个唯一值。例如,如果 col '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) 你只能有一个唯一的值......

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