在 SQL 数据库中,主键对于唯一标识记录至关重要。然而,有时为每条记录手动分配唯一值并不实际,尤其是在处理海量数据集时。为了简化这一过程,SQL 数据库提供了自动递增功能,可以为指定列自动生成唯一的数值。
本文将深入介绍如何在 SQL Server, MySQL, PostgreSQL, MS Access 和 Oracle 等主流 SQL 数据库中使用自动递增功能,并提供实用的示例和用例。
1. SQL Server 自动递增
在 SQL Server 中,自动递增功能是通过 **IDENTITY** 属性实现的。该属性允许数据库为表中的每个新记录自动生成唯一编号。
- 起始值 – 指定编号的起始位置(在本例中为 101)。
- 增量值 – 决定每条新记录的值增加多少(此处为 1)。
示例
让我们创建一个学生表,其中包含 StudentID、FirstName 和 LastName 字段。我们将使用自动递增功能自动生成 StudentID,并将其设为该表的主键。假设 IDENTITY 的起始值为 101,并且每增加一条新记录,该自动生成的键就增加 1。
CREATE TABLE Students(
Student_ID int IDENTITY(101, 1) PRIMARY KEY,
First_Name varchar(255),
Last_Name varchar(255)
);
#### 使用自动递增插入数据:
要向学生表中插入新记录,我们不需要指定 Student_ID 的值,因为它会被自动添加。
INSERT INTO Students(First_Name, Last_Name )
VALUES (‘Deeksha‘, ‘Jain‘);
INSERT INTO Students(First_Name, Last_Name )
VALUES (‘Kavisha‘, ‘Parikh‘);
输出结果:
!image 2. MySQL 自动递增
在 MySQL 中,我们使用 AUTO_INCREMENT关键词来将列设置为自动递增。默认情况下,计数器从 1 开始,并且每插入一行新数据就增加 1。
示例
让我们创建一个包含 StudentID、FirstName、LastName 字段的学生表,我们将使用自动递增来自动生成 StudentID,并将其设为该表的主键。
CREATE TABLE Students(
Student_ID int AUTO_INCREMENT PRIMARY KEY,
First_Name varchar(255),
Last_Name varchar(255)
);
使用自动递增插入数据:
要向学生表中插入新记录,我们不需要指定 Student_ID 的值,因为它会被自动添加,第一条记录的键值将为 1,后续每条记录的键值都会增加 1。
INSERT INTO Students(First_Name, Last_Name )
VALUES (‘Anish‘, ‘Jain‘);
INSERT INTO Students(First_Name, Last_Name )
VALUES (‘Akshita‘, ‘Sharma‘);
INSERT INTO Students(First_Name, Last_Name )
VALUES (‘Shruti‘, ‘Sogani‘);
输出结果:!image
#### 修改自动递增的起始值
要修改默认的起始值,我们可以使用ALTER TABLE命令,如下所示:
ALTER TABLE Students AUTO_INCREMENT = new_value;
#### 调整增量间隔:
在 MySQL 中,我们还可以修改 AUTOINCREMENT 值增加的间隔。默认情况下,它每次增加 1,但我们可以通过 INLINECODE1dc5cd1c 系统变量来更改它。
要修改增量值(即数值增加的步长),我们可以设置 INLINECODE6cb00fda 变量,其中 newinterval_value 是我们想要使用的间隔值。
**SET @@auto_increment_increment = new_interval_value;**
3. PostgreSQL 自动递增
在 PostgreSQL 中,我们使用 SERIAL 关键词来实现列的自动递增。这是创建一个自动递增的整数列的简写形式。
示例
让我们创建一个包含 StudentID、FirstName、LastName 字段的学生表,我们将使用自动递增来自动生成 StudentID,并将其设为该表的主键。
CREATE TABLE Students(
Student_ID int SERIAL PRIMARY KEY,
First_Name varchar(255),
Last_Name varchar(255)
);
#### 使用自动递增插入数据
要向学生表中插入新记录,我们不需要指定 Student_ID 的值,因为它会被自动添加。