Appearance
SQL PRIMARY KEY
SQL PRIMARY KEY(主键)约束用于唯一标识表中的每条记录。主键约束确保列中的值是唯一的,并且不能为 NULL。一个表只能有一个主键,但主键可以包含多个列(复合主键)。
语法
创建表时添加主键约束
单个列的主键约束
sql
CREATE TABLE table_name (
column1 datatype PRIMARY KEY,
column2 datatype,
...
);多个列的主键约束(复合主键)
sql
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
...
PRIMARY KEY (column1, column2)
);命名主键约束
sql
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
...
CONSTRAINT constraint_name PRIMARY KEY (column1, column2)
);表创建后添加主键约束
sql
ALTER TABLE table_name
ADD PRIMARY KEY (column1, column2);sql
-- 命名约束
ALTER TABLE table_name
ADD CONSTRAINT constraint_name PRIMARY KEY (column1, column2);移除主键约束
sql
ALTER TABLE table_name
DROP PRIMARY KEY;示例
示例 1:创建表时添加单个列的主键约束
sql
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT,
grade VARCHAR(20)
);执行结果:创建一个名为 students 的表,其中 id 列是主键,并且使用 AUTO_INCREMENT 自动生成值。
示例 2:创建表时添加复合主键
sql
CREATE TABLE order_items (
order_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
PRIMARY KEY (order_id, product_id)
);执行结果:创建一个名为 order_items 的表,其中 order_id 和 product_id 列的组合是主键。
示例 3:向有主键约束的表插入数据
sql
-- 成功插入数据(主键会自动生成)
INSERT INTO students (name, age, grade)
VALUES ('张三', 18, '高三');
-- 成功插入数据
INSERT INTO students (name, age, grade)
VALUES ('李四', 17, '高二');
-- 失败插入数据(主键值重复)
INSERT INTO students (id, name, age, grade)
VALUES (1, '王五', 19, '高三');示例 4:表创建后添加主键约束
sql
-- 创建表
CREATE TABLE students (
id INT,
name VARCHAR(50) NOT NULL,
age INT,
grade VARCHAR(20)
);
-- 添加主键约束到 id 列
ALTER TABLE students
ADD PRIMARY KEY (id);示例 5:命名主键约束
sql
-- 创建表时命名约束
CREATE TABLE students (
id INT,
name VARCHAR(50) NOT NULL,
age INT,
grade VARCHAR(20),
CONSTRAINT pk_student_id PRIMARY KEY (id)
);
-- 表创建后命名约束
ALTER TABLE students
ADD CONSTRAINT pk_student_id PRIMARY KEY (id);主键的作用
唯一标识记录:主键确保表中的每条记录都有一个唯一的标识符,便于数据的查找和管理。
提高查询性能:数据库会为主键创建索引,这可以显著提高查询性能。
建立表之间的关系:主键通常被其他表作为外键引用,用于建立表之间的关系。
确保数据完整性:主键约束确保主键列的值不能为 NULL,并且是唯一的,这有助于确保数据的完整性。
注意事项
AUTO_INCREMENT:在 MySQL 中,可以使用 AUTO_INCREMENT 关键字使主键值自动递增,避免手动指定主键值。
数据类型选择:主键通常使用整数类型(如 INT),因为整数类型的存储和查询效率较高。
复合主键:当单个列无法唯一标识记录时,可以使用复合主键。但复合主键会使表的管理变得复杂,应谨慎使用。
外键引用:当主键被其他表作为外键引用时,删除或修改主键值需要特别小心,可能会影响相关表的数据。
小结
SQL PRIMARY KEY 约束是一种用于唯一标识表中每条记录的重要约束。它结合了 NOT NULL 和 UNIQUE 约束的特性,确保主键列的值既非空又唯一。主键可以是单个列,也可以是多个列的组合(复合主键)。数据库会为主键创建索引,这可以提高查询性能。主键还用于建立表之间的关系,是数据库设计中的重要概念。