这看似毫无意义,但我会问。
在创建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
答案 0 :(得分:0)
正如您已经意识到的那样,DB2隐式地为每个IDENTITY
列创建一个序列,并且无法为这样的序列提供名称。您对自定义名称的要求似乎是任意的。