当前位置: 首页 > 教程 > SQL >

SQL 主键

精华
小牛编辑
180浏览
2023-03-14
主键(Primary Key)由表中的一个或者多个字段构成,用来唯一标识表中的每一行记录。可以将主键类比为学号、身份证号、车牌号或者 ID。

主键必须包含唯一值,换句话说,所有记录的主键都不能出现相同的值。此外,主键必须是一个具体的值,不能是 NULL 值。

当主键包含多个字段时,又称为复合键(Composite Primary Key)。

注意事项

在设计主键时,应使用尽可能少的字段,这不但能减少存储空间,还能提升查询性能。主键包含的字段越少,所需要的存储空间就越小,就性能而言,更少的数据意味着更快速地处理。

SQL 规定,主键长度不能超过 900 个字节。Oracle 规定,主键不能超过 32 个字段。

示例

下面的 SQL 语句将创建 website 表,并将 id 字段定义为主键:
CREATE TABLE website (
    id      INT              NOT NULL   AUTO_INCREMENT,
    name    VARCHAR(20)      NOT NULL,
    url     VARCHAR(30),
    age     TINYINT UNSIGNED NOT NULL,
    alexa   INT UNSIGNED     NOT NULL,
    uv      FLOAT                       DEFAULT '0',
    country CHAR(3)          NOT NULL ,
    PRIMARY KEY (id)
);
最后一行将 id 字段定义为主键。

如果 website 表和 id 字段都已经存在,则可以使用 ALTER TABLE 命令添加主键,语法如下:
ALTER TABLE website ADD PRIMARY KEY (id);
注意,只有在首次创建数据表时,那些被声明为不能包含 NULL 值的字段,才能使用 ALTER TABLE 命令添加为主键。

主键包含多个字段

在创建数据表时,为多个字段添加主键可以使用下面的 SQL 语句:
CREATE TABLE website (
    id      INT              NOT NULL   AUTO_INCREMENT,
    name    VARCHAR(20)      NOT NULL,
    url     VARCHAR(30),
    age     TINYINT UNSIGNED NOT NULL,
    alexa   INT UNSIGNED     NOT NULL,
    uv      FLOAT                       DEFAULT '0',
    country CHAR(3)          NOT NULL ,
    PRIMARY KEY (id, url)
);
最后一行将 id 和 url 字段设置为主键。

如果 website 表已经存在,则可以使用下面的 SQL 语句在 id 和 url 字段上添加主键:
ALTER TABLE website
ADD CONSTRAINT PK_CUSTID PRIMARY KEY (id, url);

删除主键

使用下面的语句可以删除表的主键约束:
ALTER TABLE website DROP PRIMARY KEY;