Teradata 中也可以定义自动增长列,语法如下:
CREATE TABLE test
(
ID INTEGER GENERATED BY DEFAULT AS IDENTITY
(START WITH 100
INCREMENT BY 1
),
CID INTEGER,
PID INTEGER)
我们用show table test来查看,则可以发现它的定义,系统自动设置了一些条件。
CREATE SET TABLE test ,NO FALLBACK ,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = DEFAULT
(
ID INTEGER GENERATED BY DEFAULT AS IDENTITY
(START WITH 100
INCREMENT BY 1
MINVALUE -2147483647
MAXVALUE 2147483647
NO CYCLE),
CID INTEGER,
PID INTEGER)
PRIMARY INDEX ( ID );
如上定义中,有两种方法定义IDENTITY 类型,他们的区别如下
ID INTEGER GENERATED BY DEFAULT AS IDENTITY
ID INTEGER GENERATED ALWAYS AS IDENTITY
运行以下的SQL:
1. insert into test(CID,PID) values(1,1)
2. insert into test(ID,CID,PID) values(1,1,1)
3. insert into test(ID,CID,PID) values(110,1,1)
BY DEFAULT :
运行成功,结果如下,可以插入指定的数值在列中
1 1 1
100 1 1
110 1 1
ALWAYS :
运行成功,结果如下,指定的数值会被忽略,转换为自动增长数值
100 1 1
101 1 1
102 1 1
注意 :在BY DEFAULT方式中,因为系统中保存有自动增长数值,如插入的数值110大于定义的100,则迟早IDENTITY会增长到这个数值,那时候就会发生 IDENTITY DUPLICATE冲突,而ALWAYS则不会有这个问题。将SQL 1多运行几次你将会发现这个错误。
版权声明:本文为博主原创文章,未经博主允许不得转载