Teradata 有不同的表类型,当创建表的时候也会给他们有默认的赋值分别如下
当你用show table test检查表定义的时候发现,它已经变成如下定义:
可以看到多次插入重复数据都成功,检查表数据验证结果
在这种情况下执行SQL:
可以看到,插入重复数据将会出错检查表数据验证结果
这个表只存在于cache中,data dictionary中也找不到这个表当User结束一个session时,这个表将自动删除所有用户无法訪问,下次用户需要重新建表
这个表存在于data dictionary中,当User结束一个session时这个表中的数据将自动删除,表还保留其它用户可以继续访问这个表,但是数据只存在于某一session中
在上边的定义中,我们使用的是on commit preserve rows执行以下SQL,我们可以看到表中存有数据
如果把定义改为on commit delete rows,我们看到表中依然没有数据这是因为每个SQL 语句都是一个隐性事务。
查看创建好的表的定义:
为了避免上述问题的出现我们应该像下面那样处理,建表语句如下:
总结:为了避免上面的问题出现有两种解决方法:
1、不使用select 查询创建表結构,而先按需要的字段类型创建表然后插入查询中的数据;
2、像上面那样处理,对空字符需要cast为需要的数据类型