SQL-自动递增


SQL 自动增量用于自动将唯一的顺序值添加到表的列中。

我们通常在创建表时在列上定义自动增量。当我们将新记录插入表中时,唯一值将添加到其中。

当我们对表列使用自动增量时,无需向该列插入 NOT NULL 值。如果我们提供这样的值,它们将覆盖唯一标识,并且增量将(仅)在 NULL 值(如果有)上继续;导致数据含糊不清。

不同的 RDBMS 以不同的方式支持自动增量功能。

MySQL中的自动增量

在 MySQL 中,您可以使用名为AUTO_INCREMENT的属性向表的列添加自动增量功能。

默认情况下,当我们在列上定义 AUTO_INCRMENT 属性时,唯一值将从“1”生成;对于表中输入的每条新记录,该列中的值都会增加 1。因此,插入的第一条记录的值为 1,第二条记录的值为 2,依此类推。

句法

以下是将 AUTO_INCRMENT 属性添加到 MySQL 中表的列的语法 -

CREATE TABLE table_name(
   column1 datatype AUTO_INCREMENT,
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype
);

例子

在查询中,我们创建一个名为 CUSTOMERS 的表,并将 AUTO_INCRMENT 添加到名为 ID 的列中 -

CREATE TABLE CUSTOMERS(
   ID INT PRIMARY KEY AUTO_INCREMENT,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2)
);

现在,让我们使用 INSERT 语句将值插入到 CUSTOMERS 表中 -

INSERT INTO CUSTOMERS (NAME, AGE, ADDRESS, SALARY) VALUES
("Ramesh", 32, "Ahmedabad", 2000.00),
("Khilan", 25, "Delhi", 1500.00),
("Kaushik", 23, "Kota", 2000.00),
("Chaitali", 25, "Mumbai", 6500.00);

确认

要验证这一点,您需要使用 SELECT 查询检索 CUSTOMERS 的内容:

SELECT * FROM CUSTOMERS;

输出

以下是上述查询的输出,在这里您可以观察到 ID 值是自动生成的 -

ID 姓名 年龄 地址 薪水
1 拉梅什 32 艾哈迈达巴德 2000.00
2 基兰 25 德里 1500.00
3 考希克 23 科塔 2000.00
4 柴塔利 25 孟买 6500.00

现有列上的 AUTO_INCRMENT

MySQL 还允许您使用 ALTER TABLE 语句在现有表上实现 AUTO_INCRMENT 属性。

以下查询开始将 CUSTOMERS 表 CUSTOMERS 中的 ID 值从 5 开始递增 -

ALTER TABLE CUSTOMERS AUTO_INCREMENT = 100;

现在,让我们插入更多记录来查看 ID 值是否自动递增。

INSERT INTO CUSTOMERS(NAME, AGE, ADDRESS, SALARY) VALUES
("Hardik", 27, "Bhopal", 8500.00),
("Komal", 22, "MP", 4500.00),
("Muffy", 24, "Indore", 10000.00);

要查看上面的表数据,我们使用以下 SELECT 查询 -

SELECT * FROM CUSTOMERS;

输出

上述查询的输出如下所示。它显示了自动增量的作用。我们获取的新插入记录的 ID 值从 100 开始。

ID 姓名 年龄 地址 薪水
1 拉梅什 32 艾哈迈达巴德 2000.00
2 基兰 25 德里 1500.00
3 考希克 23 科塔 2000.00
4 柴塔利 25 孟买 6500.00
100 哈迪克 27 博帕尔 8500.00
101 科马尔 22 海得拉巴 4500.00
102 莫菲 24 印多尔 10000.00

SQL Server 中的自动增量

在 SQL Server 中,没有直接的命令/查询来执行自动增量。相反,我们使用IDENTITY()属性。该属性的作用类似于 MySQL 中的 AUTO_INCRMENT 属性。它自动生成唯一的连续数字,主要用于 PRIMARY KEY 约束。

句法

以下是 SQL Server 中 IDENTITY() 属性的基本语法 -

CREATE TABLE table_name (
   column1 datatype IDENTITY [(seed, increment)],
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype
);

该属性接受两个参数。同样的描述如下:

  • 种子:设置自动递增列的起始值。
  • 增量:它指定每个新行的值增加多少。

例子

在以下示例中,我们在名为 CUSTOMERS 的表的 ID 列上使用 IDENTITY() 属性 -

CREATE TABLE CUSTOMERS(
   ID INT PRIMARY KEY IDENTITY(1,1),
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2)
);

创建表后,我们使用以下查询插入一些记录 -

INSERT INTO CUSTOMERS(NAME, AGE, ADDRESS, SALARY) VALUES
('Ramesh', 32, 'Ahmedabad', 2000.00),
('Khilan', 25, 'Delhi', 1500.00),
('Kaushik', 23, 'Kota', 2000.00),
('Chaitali', 25, 'Mumbai', 6500.00);

要查看表数据,我们使用以下 SELECT 查询 -

SELECT * FROM CUSTOMERS;

输出

以下是上述查询的输出,其中 ID 值是自动生成的 -

ID 姓名 年龄 地址 薪水
1 拉梅什 32 艾哈迈达巴德 2000.00
2 基兰 25 德里 1500.00
3 考希克 23 科塔 2000.00
4 柴塔利 25 孟买 6500.00