📜  SQL自动增量

📅  最后修改于: 2021-08-27 06:48:25             🧑  作者: Mango

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

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

  1. SQL服务器
  2. 的MySQL
  3. PostgreSQL的
  4. MS Access
  5. 甲骨文

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

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

例子:
我们将使用字段Student_ID,First_Name,Last_Name创建学生表,我们将使用自动增量自动生成Student_ID,并将其设为表的主键。假设IDENTITY的起始值为101,我们将为每个新记录将自动生成的键加1。

CREATE TABLE Students(
Student_ID int IDENTITY(101, 1) PRIMARY KEY, 
First_Name varchar(255),
Last_Name varchar(255)
);

要将新记录插入students表中,我们将不指定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创建学生表,我们将使用自动增量自动生成Student_ID,并将其设为表的主键。

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

要将新记录插入students表中,我们将不指定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 Server的变量auto_increment_increment

mysql>
SET @@ auto_increment_increment=new_interval_value; 

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

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

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

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

要将新记录插入students表中,我们将不指定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 Access自动递增:
在MS Access中,AUTOINCREMENT关键字用于执行自动递增功能。默认情况下,AUTOINCREMENT以1开头并以1递增。

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

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

要将新记录插入students表中,我们将不指定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; 

在以上语法中,

  • sequence_name –
    它指的是我们要产生的序列对象的名称。
  • 从…开始 –
    接下来是我们要使用的起始值。在这里,我们提供了1作为起始值。
  • 增加–
    接下来是您要增加的值,在此我们想将后续键增加1。
  • CACHE –
    紧随其后的是要存储的最大数量的值,以加快访问速度。

例子:
下面的代码创建了一个名为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'); 

输出: