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

词义解释

主键(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 添加候选键约束,都需要指定候选键所涉及的列,并为候选键指定一个名称(可选)。

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

你可能感兴趣的:(MySQL,mysql,数据库,sql)