AUTO_INCREMENT 和 IDENTITY 序列

AUTO_INCREMENT 和 IDENTITY 约束是将列与序列相关联的同义词。当添加新行时,此序列会自动递增列值。

在表中定义 AUTO_INCREMENT 或 IDENTITY 列,如下所示:

CREATE TABLE table-name...
  (column-name
    {AUTO_INCREMENT | IDENTITY}
      ( [ cache-size | start, increment [, cache-size ] ] )

AUTO_INCREMENT/IDENTITY 序列由定义它们的表拥有,并且不存在于该表之外。与命名序列不同,您不能使用 ALTER SEQUENCE 管理 AUTO_INCREMENT/IDENTITY 序列。例如,您不能独立于其表更改 AUTO_INCREMENT/IDENTITY 序列的架构。如果将表移动到另一个架构,序列会自动随之移动。

可以通过调用 LAST_INSERT_ID 函数获取为 AUTO_INCREMENT/IDENTITY 序列生成的最后一个值。

参数

限制

以下限制适用于 AUTO_INCREMENT/IDENTITY 列:

  • 一个表只能包含一个 AUTO_INCREMENT/IDENTITY 列。

  • 即使未提交尝试向表中插入值的事务,AUTO_INCREMENT/IDENTITY 值也绝对不会回退。

  • 不能更改 AUTO_INCREMENT/IDENTITY 列的值。

具有 AUTO_INCREMENT/IDENTITY 列的表还可以包含一个或多个设置为命名序列的列。

示例

以下示例显示了如何使用 IDENTITY 列约束创建一个包含 ID 列的表。ID 列的初始值为 1。每次插入一行时,该列都将以 1 为增量递增。

  1. 创建名为 Premium_Customer 的表:

    => CREATE TABLE Premium_Customer(
         ID IDENTITY(1,1),
         lname VARCHAR(25),
         fname VARCHAR(25),
         store_membership_card INTEGER
    );
    => INSERT INTO Premium_Customer (lname, fname, store_membership_card )
         VALUES ('Gupta', 'Saleem', 475987);
    

    IDENTITY 列的种子值为 1,它指定加载到表中的第一行的值,增量为 1,它指定添加到上一行的 IDENTITY 值的值。

  2. 确认添加的行并查看 ID 值:

    => SELECT * FROM Premium_Customer;
     ID | lname | fname  | store_membership_card
    ----+-------+--------+-----------------------
      1 | Gupta | Saleem |                475987
    (1 row)
    
  3. 增加一个行:

    => INSERT INTO Premium_Customer (lname, fname, store_membership_card)
       VALUES ('Lee', 'Chen', 598742);
    
  4. 调用 Vertica 函数 LAST_INSERT_ID。该函数将返回值 2,因为您之前插入了一个新客户 (Chen Lee),并且每次插入一行时,此值都会递增:

    => SELECT LAST_INSERT_ID();
     last_insert_id
    ----------------
                   2
    (1 row)
    
  5. 查看 Premium_Customer 表中的所有 ID 值:

    => SELECT * FROM Premium_Customer;
     ID | lname | fname  | store_membership_card
    ----+-------+--------+-----------------------
      1 | Gupta | Saleem |                475987
      2 | Lee   | Chen   |                598742
    (2 rows)
    

接下来的三个示例说明使用 IDENTITY 实参的三种有效方法。这些示例对 AUTO_INCREMENT 实参也有效。

第一个示例使用缓存 100,以及起始值 (1) 和增量值 (1) 的默认值:

=> CREATE TABLE t1(x IDENTITY(100), y INT);

第二个示例将起始值和增量值指定为 1,并将默认缓存值指定为 250,000:

=> CREATE TABLE t2(y IDENTITY(1,1), x INT);

第三个示例将起始值和增量值指定为 1,并将缓存值指定为 100:

=> CREATE TABLE t3(z IDENTITY(1,1,100), zx INT);