Teradata Table Type

Teradata 有不同的表类型,当创建表的时候也会给他们有默认的赋值,分别如下

1. MULTISET Table 

create table test
( id int,
  name char(20)
)

当你用show table test检查表定义的时候发现,它已经变成如下定义:
CREATE MULTISET TABLE test ,NO FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT
     (
      id INTEGER,
      name CHAR(20) CHARACTER SET LATIN CASESPECIFIC)
PRIMARY INDEX ( id );

可以看到,系统默认会将表设置为MULTISET Table,没有备份(FALLBACK )和恢复日志(BEFORE JOURNAL/AFTER JOURNAL),而且会默认将第一列设置为PRIMARY INDEX。

执行如下SQL:
insert into test values(1,'test');
insert into test values(1,'test');

可以看到,多次插入重复数据都成功,检查表数据验证结果。

2. SET Table 

当创建表定义为create set table test,则系统表定义为CREATE SET TABLE test ,NO FALLBACK……

在这种情况下执行SQL:
insert into test values(1,'test');
insert into test values(1,'test');

可以看到,插入重复数据将会出错,检查表数据验证结果

区别: 
SET Table 不可以包含重复数据
MULTISET Table 可以包含重复数据

3. VOLATILE Table 

定义如下:
create volatile table test as
( select * from table
) with data
on commit preserve rows

这个表只存在于cache中,data dictionary中也找不到这个表,当User结束一个session时,这个表将自动删除,所有用户无法访问,下次用户需要重新建表。

4. GLOBAL TEMPORARY Table 

定义如下:
create global temporary table test as
( select * from table
) with no data    -- global temporary table cannot define with data
on commit preserve rows

这个表存在于data dictionary中,当User结束一个session时,这个表中的数据将自动删除,表还保留,其它用户可以继续访问这个表,但是数据只存在于某一session中。

在上边的定义中,我们使用的是on commit preserve rows,执行以下SQL,我们可以看到表中存有数据。
insert into test
select *
from table

然后执行
select *
from test

如果把定义改为on commit delete rows,我们看到表中依然没有数据,这是因为每个SQL 语句都是一个隐性事务。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值