📜  sql中的主键和唯一键(1)

📅  最后修改于: 2023-12-03 15:35:07.971000             🧑  作者: Mango

SQL中的主键和唯一键

在关系型数据库中,每张表都要有一个或多个用来标识、区分各个数据行的列。主键和唯一键都是用来定义这样的列的。

主键

主键是用来唯一标识每一行数据的列或列集合。在一张表中,每一行数据的主键值都是唯一的,且不能为空。主键可以由单列或多列组成。

创建主键

在创建表时,可以使用 PRIMARY KEY 关键字来指定主键:

CREATE TABLE myTable
(
  id INT PRIMARY KEY,
  name VARCHAR(50),
  age INT
);

上述 SQL 语句创建了一张名为 myTable 的表,其中的 id 列被指定为主键。

如果需要同时指定多个列为主键,可以在 PRIMARY KEY 后面列出多个列名,用逗号隔开:

CREATE TABLE myTable
(
  id INT,
  name VARCHAR(50),
  age INT,
  PRIMARY KEY (id, name)
);

上述 SQL 语句创建了一张名为 myTable 的表,其中的 idname 列共同组成了主键。

主键的作用

主键有以下作用:

  • 唯一标识每一条记录,保证数据的唯一性。
  • 主键列不能为空,保证数据的完整性。
  • 在一些关系型数据库系统中,主键还被用作数据记录之间的引用。
主键的选取规则

选择主键时应当遵循以下规则:

  • 值应当唯一。
  • 选取的列应当简单。
  • 选取的列应当尽量不被修改。
唯一键

唯一键是一列或列集合,其值在表中唯一,但是可以为 NULL。与主键不同的是,一张表可以有多个唯一键。

创建唯一键

在创建表时,可以使用 UNIQUE 关键字来指定唯一键:

CREATE TABLE myTable
(
  id INT,
  name VARCHAR(50) UNIQUE,
  age INT
);

上述 SQL 语句创建了一张名为 myTable 的表,其中的 name 列被指定为唯一键。

唯一键的作用

唯一键的作用与主键相似,但是唯一键允许有多个 NULL 值。

  • 唯一标识每一条记录,保证数据的唯一性。
  • 唯一键列允许为空,但是重复 NULL 值被认为是唯一的。
  • 在一些关系型数据库系统中,唯一键还被用作数据记录之间的引用。
选择主键还是唯一键

选择主键还是唯一键应当根据具体情况来确定。在下面的情况中,主键是更好的选择:

  • 数据列不能为空。
  • 数据列会被频繁地使用于查询中。

在下面的情况中,唯一键是更好的选择:

  • 数据列可以为空。
  • 数据列不会被频繁地使用于查询中。

最后,需要注意的是,在实际的开发中,应当尽量避免对主键或唯一键使用系统自带的自增长机制,而是应当使用业务上的实际标识符作为主键或唯一键。