DB2在create table上命名序列

时间:2014-03-08 16:45:36

标签: sql db2 ddl

这看似毫无意义,但我会问。

在创建DDL时,我希望将所有关系和“额外”信息都设置为NAMED,因此当数据库引发错误时,使用我的名字而不是某些自动生成的ID

这对我的关系和索引很有用,但是我注意到DB2存储了“序列”,它只是命名它们......我似乎无法弄清楚如何在创建脚本中命名它们 - 以及进入AFTER创建以找出什么不是一种选择。

示例

SEQUENCE MY_SCHEMA.SQL131021121240860 is what DB2 named it when I created

我想做什么

CREATE SEQUENCE MY_SCHEMA.MY_TABLE_SEQ START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 32767 0 0 CACHE 20;

我在CREATE TABLE之前尝试过这个,之后......但序列总是用'SQL131021121240 ..'命名

以下是我尝试过的两种方式......

-- BEFORE, as my ERD software does...
CREATE SEQUENCE MY_SCHEMA.TEST_SEQ START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 32767 0 0 CACHE 20;

CREATE TABLE MY_SCHEMA.TEST (
  ID SMALLINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1, INCREMENT BY 1 ) NOT NULL,
  NAME VARCHAR( 255 ) NOT NULL,

  CONSTRAINT MY_SCHEMA_TEST_PK PRIMARY KEY ( ID )
) IN STORE16K;


-- AFTER, as it makes sense to me, that the table has to exist first
CREATE TABLE MY_SCHEMA.TEST2 (
  ID SMALLINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1, INCREMENT BY 1 ) NOT NULL,
  NAME VARCHAR( 255 ) NOT NULL,

  CONSTRAINT MY_SCHEMA_TEST2_PK PRIMARY KEY ( ID )
) IN STORE16K;
CREATE SEQUENCE MY_SCHEMA.TEST2_SEQ START WITH 1 INCREMENT BY 1 MINVALUE 1000 MAXVALUE 32767 0 0 CACHE 20;

在这两种情况下,DB命名的序列都显示在SEQUENCES文件夹中....

能做到吗?有没有理由不这样做?我只是讨厌在图表和DDL中看到像“SQL131021121240860”这样的标签....

在做更多的阅读时,似乎我不理解SEQUENCES,但我认为我的问题仍然相关。我还是喜欢NAME。

我对序列在身份字段上自动创建这一事实感到困惑 - 这篇文章中的评论(DB2 Auto generated Column / GENERATED ALWAYS pros and cons over sequence)使得它看起来像是使用'生成的身份'或'的任何一个/或命题序列' - 但CREATE TABLE的行为只有一列作为标识创建一个序列...不仅仅是这样但它看起来好像是1:1 - 这可能是身份所需要的,而且最有可能是定义的序列可以被其他东西使用..我得到它们“没有绑定”到表格......

无论哪种方式 - 我的如何命名他们的问题,而不是让数据库命名这仍然是我的观点。

THX

1 个答案:

答案 0 :(得分:0)

正如您已经意识到的那样,DB2隐式地为每个IDENTITY列创建一个序列,并且无法为这样的序列提供名称。您对自定义名称的要求似乎是任意的。