不理解不是null默认值

时间:2017-02-17 16:00:59

标签: db2 ibm-midrange

所以我认为NOT NULL DEFAULT如果与列名一起使用会填充默认值

INSERT INTO TPAVIT/SP001F ( sp1ruln,SP1FILE,SP1FLD,        
SP1CND,SP1VAL,SP1STID)                         
VALUES(3,'ITMRVA','ENGNO','LIKE','%416050%','PLD') 

以下错误即将出现:

Null values not allowed in column or variable SP1SEQNO.

但我已将SP1SEQNO定义如下

SP1SEQNO   CHAR(3)      NOT NULL DEFAULT

如果INSERT没有,那么这不应该提供默认值吗?这个字段虽然是主键。

1 个答案:

答案 0 :(得分:1)

我认为primary key是问题所在。拥有主键列的默认值实际上没有意义,因为您只能将该默认值添加到表中一次。之后,您将获得重复的密钥错误。要解决此问题,您需要删除DEFAULT,并在INSERT语句中指定唯一键。

备选方案:

  1. 将字段设为数字,并使用AS IDENTITY定义列。
  2. 将字段设为数字,然后使用序列使用NEXT VALUE FOR sequence-name填充字段。在您的INSERT声明中。
  3. 我更喜欢序列,因为它更容易重启。