将autoincrement列修改为全局自动增量列

时间:2010-12-08 16:36:01

标签: database sybase auto-increment

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

我的问题是我需要采取哪些步骤才能使其正常运行。已有数千行数据使用常规自动增量默认值。

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

这通常是解决问题的方法。但是你有一些具体的陈述让我担心。也是顺序。我不确定您的经验水平,您使用的条款可能准确也可能不准确。

对于每张桌子......

  

...将PK切换到

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

  

...放弃旧FK的

好的,这就是约束。

  

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

你到底是什么意思?重新添加FK约束?这不会更改现有数据,它将适用于添加的任何行。

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

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

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

  3. 然后删除old_PK_column。

答案 1 :(得分: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