我们公司使用Sybase,并计划建立Mobilink系统(数据复制系统)。因此,我们需要从使用自动增量列更改为全局自动增量列。将自动增量列修改为全局自动增量列
我的问题是我需要采取什么措施才能正常工作。已有数千行数据使用常规自动增量默认值。
我想我需要创建一个默认的全局自动增量的新列,填充数据(数字(*)),将PK切换到它,放弃旧的FK,删除旧的列,重命名新的列到旧的列,然后重新应用FK's。
有没有更简单的方法来完成我所需要的?
谢谢!
我们公司使用Sybase,并计划建立Mobilink系统(数据复制系统)。因此,我们需要从使用自动增量列更改为全局自动增量列。将自动增量列修改为全局自动增量列
我的问题是我需要采取什么措施才能正常工作。已有数千行数据使用常规自动增量默认值。
我想我需要创建一个默认的全局自动增量的新列,填充数据(数字(*)),将PK切换到它,放弃旧的FK,删除旧的列,重命名新的列到旧的列,然后重新应用FK's。
有没有更简单的方法来完成我所需要的?
谢谢!
一般来说,这是一条路。但是有一些具体的陈述会引起我的关注。也是序列。我不确定你的经验水平,你使用的条款可能会也可能不准确。
对于每个表...
...切换PK吧
怎么样在子表的FK值?或者你的意思是你也会改变它们?
...删除旧的FK的
好吧,这就是约束。
...删除旧列,将新列重命名为旧列,然后重新应用FK。
你究竟是什么意思?将FK约束添加回来?那将不会改变现有的数据,它将适用于任何新增的行。
希望你明白我的意思是你的任务顺序可疑。在将父项中的old_PK_column删除之前,需要:
在每个子表中添加已删除的FK约束。
对于每个子表:将所有FK值更新到new_PK_column。
然后删除old_PK_column。
你只是改变所产生PK值的方式,所以它足以:
ALTER TABLE <table>
modify <column> default global autoincrement (1000000);
使用的1,000,0000
另外一个分区的大小请确保您设置的全局数据库标识符,例如:
SET OPTION PUBLIC.global_database_id = 10;
因此,将生成的下一个PK是10,000,001
你在最后的评论(1,2,3)是我在其他术语中所说的。谢谢!会给你一个复选标记:) – numone 2010-12-13 18:37:27