MySQL基础扎实——主键与候选键

主键是表中的唯一标识,不允许为空且每个表只能有一个。候选键可以替代主键,也可能包含空值,多个候选键可形成复合键。创建主键和候选键通常在创建表时指定,或通过ALTERTABLE语句添加约束。主键用于唯一标识记录,候选键则提供额外的唯一标识选项。
摘要由CSDN通过智能技术生成

在这里插入图片描述

词义解释

主键(Primary Key)和候选键(Candidate Key)是关系型数据库中的术语,用于标识和唯一确定表中的记录。它们之间有以下区别:

  1. 唯一性:主键是表中的唯一标识,每个表只能有一个主键,而候选键是可以作为主键的备选项,并且每个候选键也必须具有唯一性。

  2. 空值(NULL):主键不允许包含空值(NULL),也就是说,主键必须在每个记录中都有一个非空值。而候选键可以包含空值或重复值。

  3. 唯一标识性:主键用于唯一地标识表中的每个记录,确保每个记录具有唯一的标识符。候选键也具有唯一性,但它们可能会被用作其他目的,如参照外键或用于数据的逻辑关联。

  4. 选择性:主键是必选的,也就是说,每个记录必须具有主键值。而候选键可以被选择性地用作主键,当然,前提是满足唯一性和非空的要求。

需要注意的是,候选键可能包含多个列,这种情况下称为复合候选键(Composite Candidate Key)。复合候选键要求组合键的值在全表中都是唯一的,但单独的每一列可能不满足唯一性。

综上所述,主键在关系型数据库中具有特殊的作用,用于标识和唯一确定表中的记录,而候选键是可以代替主键的备选项,但它们需要满足唯一性和非空性的要求。

创建主键

要创建主键,可以在表的创建过程中或表已存在时使用 ALTER TABLE 语句来指定主键约束。下面是几种常见的创建主键的示例代码:

在表的创建过程中指定主键:

-- 创建一个学生表,并指定主键
CREATE TABLE students (
    student_id INT PRIMARY KEY,
    student_name VARCHAR(50) NOT NULL,
    student_email VARCHAR(50),
    student_age INT,
    student_major VARCHAR(50)
);

上述代码中,student_id 列被指定为主键。

在表已存在时使用 ALTER TABLE 添加主键约束:

-- 在已存在的表上添加主键约束
ALTER TABLE students 
ADD CONSTRAINT pk_students PRIMARY KEY (student_id);

上述代码中,students 表已存在,并使用 ALTER TABLE 语句添加了名为 pk_students 的主键约束,该主键由 student_id 列组成。

无论是在表的创建过程中还是在已存在的表上使用 ALTER TABLE 添加主键约束,都需要指定主键所涉及的列,并为主键指定一个名称(可选)。

创建主键约束后,数据库会自动确保被指定为主键的列包含唯一的、非空的值。如果试图插入具有相同主键值的记录或将空值插入主键列,则会导致插入失败或触发错误。

创建候选键

在关系型数据库中,候选键是能够唯一标识每行数据的一组列。它们可以由一个或多个列组成。以下是创建候选键的示例代码:

在表的创建过程中指定候选键:

-- 创建一个员工表,并指定候选键
CREATE TABLE employees (
    employee_id INT,
    employee_name VARCHAR(50) NOT NULL,
    employee_email VARCHAR(50) UNIQUE,
    employee_department VARCHAR(50),
    employee_salary DECIMAL(10, 2),
    CONSTRAINT uk_employee_email_department UNIQUE (employee_email, employee_department)
);

上述代码中,候选键由 employee_emailemployee_department 列组成。通过 CONSTRAINT 关键字,我们在表的创建过程中指定了候选键的约束,并为候选键指定了名称 uk_employee_email_department

在已存在的表上使用 ALTER TABLE 添加候选键约束:

-- 在已存在的表上添加候选键约束
ALTER TABLE employees 
ADD CONSTRAINT uk_employee_email_department UNIQUE (employee_email, employee_department);

上述代码中,employees 表已存在,并使用 ALTER TABLE 语句添加了名为 uk_employee_email_department 的候选键约束,该候选键由 employee_emailemployee_department 列组成。

无论是在表的创建过程中还是在已存在的表上使用 ALTER TABLE 添加候选键约束,都需要指定候选键所涉及的列,并为候选键指定一个名称(可选)。

候选键约束确保候选键所涉及的列数据的组合是唯一的。这意味着不允许插入重复的候选键组合值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT小辉同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值