MySQL 主键约束
介绍
在数据库中,主键(Primary Key)是用于标识一条记录的唯一标识符。主键约束是数据库设计和管理中最基本的概念之一,它用于确保数据表中的主键列的唯一性和空值约束。主键的作用是为了方便快速地检索和访问数据,同时确保数据的一致性和完整性。
主键的类型
MySQL 支持多种类型的主键,其中最常用的是单列主键和复合主键。
单列主键
单列主键是指表中的唯一列作为主键。当一个表中某一列被指定为主键时,该列不允许包含任何重复的或者空值。可以使用 PRIMARY KEY
关键字来定义单列主键。
示例代码:
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);
在上述的示例中,id
列被指定为主键,因此不允许重复值或者空值。
复合主键
复合主键是由多个列联合起来作为主键,用于确保多列的唯一性。可以使用 PRIMARY KEY
关键字来定义复合主键。
示例代码:
CREATE TABLE orders (
order_id INT,
customer_id INT,
product_id INT,
PRIMARY KEY (order_id, customer_id)
);
在上述的示例中,(order_id, customer_id)
联合列被指定为复合主键。
主键约束详解
主键约束是用于声明主键的一种约束力。当一个列被指定为主键时,MySQL会自动应用主键约束。主键约束的特点如下:
唯一性约束
主键约束要求主键列的值在表中是唯一的。这意味着每一行的主键列的值都不能与其他行的主键列的值相同。如果插入或更新了一条违反唯一性约束的记录,MySQL会抛出一个错误。
示例代码:
INSERT INTO students (id, name, age) VALUES (1, 'John', 20);
INSERT INTO students (id, name, age) VALUES (1, 'Jane', 22); -- 违反唯一性约束
上述示例代码插入了两条具有相同主键值的记录,第二条记录违反了唯一性约束。
空值约束
主键约束要求主键列的值不能为NULL。如果尝试向主键列插入NULL值,MySQL会抛出一个错误。
示例代码:
INSERT INTO students (id, name, age) VALUES (NULL, 'John', 20); -- 违反空值约束
上述示例代码尝试向主键列插入了NULL值,违反了空值约束。
自动递增
当主键列的数据类型为整型(如INT),并且使用 AUTO_INCREMENT
关键字进行定义时,MySQL会自动为主键列分配一个唯一的递增值。这样可以方便地插入记录,无需手动指定主键的值。
示例代码:
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age INT
);
INSERT INTO students (name, age) VALUES ('John', 20); -- 主键列将自动赋值为1
INSERT INTO students (name, age) VALUES ('Jane', 22); -- 主键列将自动赋值为2
上述示例代码中,id
列被指定为自动递增的主键列,当插入记录时,主键列会自动递增。
主键的创建和删除
在 MySQL 中,可以在创建表的时候指定主键,也可以在表已经创建后,使用 ALTER TABLE
语句来添加主键约束。
创建主键
在创建表时指定主键的语法如下:
CREATE TABLE table_name (
column1 datatype PRIMARY KEY,
column2 datatype,
column3 datatype,
...
);
在以上语法中,column1
被指定为主键列。
示例代码:
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);
以上示例代码创建了一个名为 students
的表,id
列被指定为主键。
添加主键
如果在表已经创建后需要添加主键约束,可以使用 ALTER TABLE
语句。
添加主键的语法如下:
ALTER TABLE table_name
ADD PRIMARY KEY (column1, column2, ...);
在以上语法中,(column1, column2, ...)
被指定为主键。
示例代码:
ALTER TABLE students
ADD PRIMARY KEY (id);
以上示例代码向 students
表添加了一个名为 id
的主键。
删除主键
如果需要删除一个已经存在的主键约束,可以使用 ALTER TABLE
语句。
删除主键的语法如下:
ALTER TABLE table_name
DROP PRIMARY KEY;
示例代码:
ALTER TABLE students
DROP PRIMARY KEY;
以上示例代码删除了 students
表的主键约束。
总结
MySQL 主键约束是一种非常重要的数据库约束,用于确保数据表中的唯一性和完整性。本文介绍了主键的类型、主键约束的特点,以及创建和删除主键的方法。