今天我发现你可以有一个使用两列的主键(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'
发布于 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)
希望这能有所帮助。
发布于 2014-05-05 18:16:09
还有一件事需要注意:主键在MySQL中是自动索引的。正如前面提到的here,在主键中提到的列的顺序对性能很重要
发布于 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)对,你只能有一个唯一的值...
这有意义吗?或者您想让我进一步详细说明?
https://stackoverflow.com/questions/14206868
复制相似问题