一尘不染

唯一键和主键之间的区别

sql

我在一本书中遇到了以下SQL:

CREATE TABLE 'categories'(
id SMALLINT NOT NULL AUTO INCREMENT,
category VARCHAR(30) NOT NULL,
PRIMARY KEY('id'),
UNIQUE KEY 'category'('category')
)ENGINE=MyISAM DEFAULT CHARSET = utf8;

我想知道为什么在同一张表中需要一个PRIMARY和UNIQUE KEY?我想,这个问题的根源在于,PRIMARY和UNIQUE键之间有什么区别?


阅读 140

收藏
2021-03-10

共1个答案

一尘不染

关系模型说,一个键和另一个键之间没有本质区别。也就是说,当一个关系具有多个候选键时,没有理论上的理由声明 键比
键更重要。从本质上讲,这意味着没有理论上的理由将一个键标识 为主键 ,而将所有其他 标识为辅助键。(不过,可能有实际原因。)

许多关系具有多个候选密钥。例如,美国各州之间的关系可能具有这样的数据。

State      Abbr      Postal Code
--
Alabama    Ala.      AL
Alaska     Alaska    AK
Arizona    Ariz.     AZ
...
Wyoming    Wyo.      WY

显然,这三列中的每一个值都是唯一的-有三个候选键。

如果要在SQL中建立一个表来存储这些值,则可以这样做。

CREATE TABLE states (
  state varchar(15) primary key,
  abbr varchar(10) not null unique,
  postal_code char(2) not null unique
);

而且您会做类似的事情,因为SQL没有其他方法可以说“我的表有三个单独的候选键”。

我没有选择“ state”作为主键的任何特殊原因。我可以轻松选择“ abbr”或“ postal_code”。这三列中的任何一列也可以用作外键引用的目标。

到目前为止,我也可以建立这样的表。

CREATE TABLE states (
  state varchar(15) not null unique,
  abbr varchar(10) not null unique,
  postal_code char(2) not null unique
);
2021-03-10