2010-12-08 112 views
0

我们公司使用Sybase,并计划建立Mobilink系统(数据复制系统)。因此,我们需要从使用自动增量列更改为全局自动增量列。将自动增量列修改为全局自动增量列

我的问题是我需要采取什么措施才能正常工作。已有数千行数据使用常规自动增量默认值。

我想我需要创建一个默认的全局自动增量的新列,填充数据(数字(*)),将PK切换到它,放弃旧的FK,删除旧的列,重命名新的列到旧的列,然后重新应用FK's。

有没有更简单的方法来完成我所需要的?

谢谢!

回答

1

一般来说,这是一条路。但是有一些具体的陈述会引起我的关注。也是序列。我不确定你的经验水平,你使用的条款可能会也可能不准确。

对于每个表...

...切换PK吧

怎么样在子表的FK值?或者你的意思是你也会改变它们?

...删除旧的FK的

好吧,这就是约束。

...删除旧列,将新列重命名为旧列,然后重新应用FK。

你究竟是什么意思?将FK约束添加回来?那将不会改变现有的数据,它将适用于任何新增的行。

希望你明白我的意思是你的任务顺序可疑。在将父项中的old_PK_column删除之前,需要:

  1. 在每个子表中添加已删除的FK约束。

  2. 对于每个子表:将所有FK值更新到new_PK_column。

  3. 然后删除old_PK_column。

+0

你在最后的评论(1,2,3)是我在其他术语中所说的。谢谢!会给你一个复选标记:) – numone 2010-12-13 18:37:27

1

你只是改变所产生PK值的方式,所以它足以:

ALTER TABLE <table> 
    modify <column> default global autoincrement (1000000); 

使用的1,000,0000

另外一个分区的大小请确保您设置的全局数据库标识符,例如:

SET OPTION PUBLIC.global_database_id = 10; 

因此,将生成的下一个PK是10,000,001