主键和唯一键的区别

  • Post category:database

主键和唯一键都是关系型数据库中用于约束表数据的一种方式,但它们之间还是有一些区别的。

主键

定义

主键是一种用于唯一标识表中每一条数据的约束,主键的值在表中必须是唯一的,没有重复项。主键可以包含一个或多个字段,但无论是单个字段还是多个字段组合成的,主键的值必须在表中唯一。

特点

  • 主键值必须是唯一的。
  • 主键值不可为空值(null)。
  • 主键值不可更新或更改。
  • 可以是单一字段或多字段组合而成。
  • 一个表只能有一个主键。
  • 主键可用于表之间的外键引用。

示例

比如有一个用户表,包含用户名、密码、电子邮件和电话这几个字段,在其中你可以选择用户名作为主键,因为这个值在所有用户中应该唯一,且不可为空。当你插入一条新用户信息时,必须保证这个表中没有重复的用户名数据,否则将会插入失败。

唯一键

定义

唯一键也是一种用于约束表数据的方式,唯一键确保表中的某个字段或字段组合在表中的每一行中只出现一次。

特点

  • 唯一键值必须是唯一的。
  • 唯一键值可以为空(null)。
  • 唯一键值可以更新或更改。
  • 可以包含一个或多个字段。
  • 一张表可以有多个唯一键。

示例

同样以用户表为例,在该表中,电子邮件和电话号码这两个字段都需要保证唯一性,因为同一个电子邮件地址和电话号码不能对应多个用户。在这个例子中,你可以选择在电子邮件和电话这两个字段上创建一个唯一键。

区别

  • 主键和唯一键都要求键值唯一,但主键值不允许为空,而唯一键值允许为空。
  • 主键值不可更新或更改,而唯一键值可以更新或更改。

总的来说,主键在约束数据唯一性时比较严格,而唯一键则在某些情况下更加灵活。

以下是主键和唯一键格式的示例代码:

主键

CREATE TABLE users (
  id INT NOT NULL PRIMARY KEY,
  username VARCHAR(50) NOT NULL,
  password VARCHAR(50) NOT NULL,
  email VARCHAR(255) NOT NULL,
  phone VARCHAR(20) NOT NULL
);

唯一键

CREATE TABLE users (
  id INT NOT NULL,
  username VARCHAR(50) NOT NULL,
  password VARCHAR(50) NOT NULL,
  email VARCHAR(255),
  phone VARCHAR(20),
  UNIQUE (email, phone)
);