AUTO_INCREMENT和IDENTITY序列

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

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

CREATE TABLE table-name...
(column-name {AUTO_INCREMENT | IDENTITY} [(args)], ...)
其中args是 1 到 3 个可选参数,允许您控制序列行为(请参阅下面的参数)。

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

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

参数
AUTO_INCREMENT/IDENTITY约束可以介于 0 和三个参数之间。这些参数允许您指定列的开始值、列的增量或递增量以及每个会话每个节点缓存的唯一数字数。

以下指定这些参数:

参数 描述

没有
应用以下默认设置:

起始值为 1。
值至少增加 1。
每个节点缓存此序列的每个会话 250,000 个唯一数字。
1
指定每个节点每个会话可以缓存的唯一数字数,如下所示:

1 指定每个会话每个节点缓存的唯一数字数。
0 或 1 指定禁用缓存。
IDENTITY(cache)
默认值: 250,000

2 或 3
设置如下:

{AUTO_INCREMENT | IDENTITY} (start, increment[, cache)] )
开始:为此列设置的第一个值。

默认值: 1

增量:正整数或负整数,指定最小金额以从上一行中的列值中递增或递增列值。

默认值: 1

将此参数设置为 X 的值保证列值始终至少递增X。但是,列值有时可以增加X多个,除非您还将缓存值设置为 0 或 1(无缓存)。

缓存: 以下之一:

1 指定每个节点可以为此序列缓存每个会话的唯一数字数。
0 或 1 指定禁用缓存。
默认值: 250,000

有关详细信息,请参阅序列缓存。

限制
以下限制适用于 / 列:AUTO_INCREMENTIDENTITY

表只能包含一个/列。AUTO_INCREMENTIDENTITY

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

AUTO_INCREMENT/IDENTITY值永远不会回滚,即使尝试将值插入表的事务未提交。
不能更改 / 列的值。AUTO_INCREMENTIDENTITY
例子
下面的示例演示如何使用列约束创建具有 ID 列的表。ID 列的初始值为 1。每次插入一行时,它都会递增 1。IDENTITY

创建表 :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值的值。

确认添加的行并查看 ID 值:
=> SELECT * FROM Premium_Customer;
ID | lname | fname | store_membership_card
----+-------+--------+-----------------------
1 | Gupta | Saleem | 475987
(1 row)
添加另一行:
=> INSERT INTO Premium_Customer (lname, fname, store_membership_card)
VALUES ('Lee', 'Chen', 598742);
调用Vertica 函数LAST_INSERT_ID。函数返回值 2,因为您以前插入了新客户(陈李),并且每次插入行时都会递增此值:
=> SELECT LAST_INSERT_ID();
last_insert_id

           2

(1 row)
查看表中的所有 ID 值:Premium_Customer
=> SELECT * FROM Premium_Customer;
ID | lname | fname | store_membership_card
----+-------+--------+-----------------------
1 | Gupta | Saleem | 475987
2 | Lee | Chen | 598742
(2 rows)
接下来的三个示例说明了使用参数的三种有效方法。这些示例对参数也有效。IDENTITYAUTO_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);

Vertica 支持自动增量和标识列约束。auto_increment非常基本,它总是以 1 开头,增量为 1。标识约束更健壮,因为它需要一些额外的参数:种子、增量和缓存,其中种子 = 起始值,增量是要添加到上一个行值的值,缓存指定要预分配和存储在内存中的唯一数字的数量,以便更快地访问。下面是一个auto_increment示例:

dbadmin=> create table emp_name (id auto_increment, name varchar(100)); CREATE TABLE dbadmin=> insert into emp_name (name) values ('Jim'); OUTPUT -------- 1 (1 row) dbadmin=> insert into emp_name (name) values ('Jane'); OUTPUT -------- 1 (1 row) dbadmin=> insert into emp_name (name) values ('Peng'); OUTPUT -------- 1 (1 row) dbadmin=> select * from emp_name; id | name ----+------ 1 | Jim 2 | Jane 3 | Peng (3 rows)
下面是一个标识示例:
dbadmin=> drop table emp_name; DROP TABLE dbadmin=> create table emp_name (id identity (1, 10, 30), name varchar(100)); CREATE TABLE dbadmin=> insert into emp_name (name) values ('Jim'); OUTPUT -------- 1 (1 row) dbadmin=> insert into emp_name (name) values ('Jane'); OUTPUT -------- 1 (1 row) dbadmin=> insert into emp_name (name) values ('Peng'); OUTPUT -------- 1 (1 row) dbadmin=> select * from emp_name; id | name ----+------ 1 | Jim 11 | Jane 21 | Peng (3 rows)

遇到问题:
insert报错后id从250000开始了,drop后重新插入正常,delet数据无效

posted @ 2021-01-06 18:25  码农煮妇  阅读(589)  评论(0)    收藏  举报