📜  SQL 自动增量

📅  最后修改于: 2021-09-10 01:28:12             🧑  作者: Mango

有时在创建表时,我们在表中没有唯一标识符,因此我们在选择主键时会遇到困难。为了解决这样的问题,我们必须手动为每条记录提供唯一键,但这通常也是一项繁琐的任务。因此我们可以使用自动增量功能,为插入的每条新记录自动生成一个数字主键值。

我们将要讨论后续 DBMS 的自动增量字段的所有数据库都支持自动增量功能:

  1. 数据库服务器
  2. MySQL
  3. PostgreSQL
  4. 微软访问
  5. 甲骨文

1. SQL Server 自动增量:
在 SQL Server 中,IDENTITY(starting_value, increment_value) 用于自动递增功能。
这里,

  • 起始值 –
    提及我们想要使用的起始值。
  • 增量值 –
    提及我们希望为后续记录增加键的值。

例子:
我们将创建包含Student_ID、First_Name、Last_Name 字段的Students 表,我们将使用自动增量自动生成Student_ID,并将其设为表的主键。让 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'); 

输出:

2. MySQL 自动增量:
在 MySQL 中,AUTO_INCREMENT 关键字用于自动增量功能。默认情况下,AUTO_INCREMENT 从 1 开始并增加 1。

例子:
我们将创建包含Student_ID、First_Name、Last_Name 字段的Students 表,我们将使用自动增量自动生成Student_ID,并将其设为表的主键。

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'); 

输出:

要更改默认起始值,我们可以使用 ALTER TABLE 命令,如下所示:

ALTER TABLE Students AUTO_INCREMENT = new_value; 

这里的 new_value 是我们想要使用的起始值。

要将 AUTO_INCREMENT 间隔值更改为不同于 1 的数字,我们将新的间隔值分配给 MySQL 服务器的变量auto_increment_increment

mysql>
SET @@ auto_increment_increment=new_interval_value; 

这里 new_interval_value 是我们想要使用的间隔值。

3. PostgreSQL 自动增量:
在 PostgreSQL 中,SERIAL 关键字用于自动递增功能。

例子:
我们将创建包含Student_ID、First_Name、Last_Name 字段的Students 表,我们将使用自动增量自动生成Student_ID,并将其设为表的主键。

CREATE TABLE Students(
Student_ID int SERIAL PRIMARY KEY, 
First_Name varchar(255),
Last_Name varchar(255)
); 

要将新记录插入到学生表中,我们不会指定 Student_ID 的值,因为它将自动添加。

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'); 

输出:

4. MS 访问自动增量:
在 MS Access 中,AUTOINCREMENT 关键字用于执行自动递增功能。默认情况下,AUTOINCREMENT 从 1 开始并增加 1。

例子:
我们将创建包含Student_ID、First_Name、Last_Name 字段的Students 表,我们将使用自动增量自动生成Student_ID,并将其设为表的主键。

CREATE TABLE Students(
Student_ID int AUTOINCREMENT 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'); 

输出:

要更改默认起始值和增量值,我们可以使用 AUTOINCREMENT 功能,如下所示:

AUTOINCREMENT(starting_value, increment_value) 

这里的starting_value 是我们想要使用的起始值, increment_value 是我们想要增加后续记录的键的值。

5. Oracle 自动增量:
在 Oracle 中,要使用自增功能,我们必须使用连续生成数字序列的序列对象创建自增字段。

句法:

CREATE SEQUENCE sequence_name
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10; 

在上面的语法中,

  • 序列名称 –
    它指的是我们要生成的序列对象的名称。
  • 从…开始 –
    后面是我们想要使用的起始值。这里我们提供了 1 作为起始值。
  • 增量 –
    后跟要增加的值。这里我们要给后续的键增加 1。
  • 缓存 –
    其次是要存储的最大数量的值,以便更快地访问。

例子:
下面的代码创建了一个名为 seq_students 的序列对象,它从 101 开始并且可以递增 1。它还会缓存多达 20 个值以提高性能。

CREATE SEQUENCE seq_students
MINVALUE 1
START WITH 101
INCREMENT BY 1
CACHE 20; 

要将新记录插入“Students”表,我们必须使用 nextval函数从 seq_students 序列中检索下一个值:

INSERT INTO Students(Student_ID, First_Name, Last_Name)
VALUES (seq_students.nextval, 'Deeksha', 'Jain');

INSERT INTO Students(Student_ID, First_Name, Last_Name)
VALUES (seq_students.nextval, 'Kavisha', 'Parikh'); 

输出: