我们公司使用Sybase,我们正计划建立Mobilink系统(数据复制系统)。因此,我们需要将自动增量列更改为全局自动增量列。
我的问题是我需要采取哪些步骤才能使其正常运行。已有数千行数据使用常规自动增量默认值。
我想我需要创建一个默认为全局自动增量的新列,用数据填充(数字(*)),将PK切换到它,删除旧FK,删除旧列,重命名新列的新列,然后重新应用FK。
有没有更简单的方法来完成我需要的东西?
谢谢!
答案 0 :(得分:1)
这通常是解决问题的方法。但是你有一些具体的陈述让我担心。也是顺序。我不确定您的经验水平,您使用的条款可能准确也可能不准确。
对于每张桌子......
...将PK切换到
子表中的FK值怎么样?或者你的意思是你也会改变它们吗?
...放弃旧FK的
好的,这就是约束。
...删除旧列,将新列重命名为旧列,然后重新应用FK。
你到底是什么意思?重新添加FK约束?这不会更改现有数据,它将适用于添加的任何新行。
希望你明白我的意思你的任务序列是可疑的。在父项中删除old_PK_column之前,您需要:
在每个子表中添加已删除的FK约束。
对于每个子表:将所有FK值更新为new_PK_column。
然后删除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