修改自增列为全局自增列
我们公司使用Sybase,我们计划建立一个Mobilink系统(数据复制系统)。因此,我们需要从使用自动增量列更改为全局自动增量列。
我的问题是我需要采取哪些步骤才能使其正常工作。已经有数千行数据使用了常规自动增量默认值。
我想我需要创建一个默认为全局自动增量的新列,用数据(number(*))填充它,将PK切换到它,删除旧的FK,删除旧列,将新列重命名为旧的,然后重新应用 FK 的。
有没有更简单的方法来完成我在这里需要的事情?
谢谢!
Our company uses Sybase and we are planning on setting up a Mobilink system (data replication system). We therefore need to change from using autoincrement columns to global autoincrememnt columns.
My question is what steps do I need to take to get this working properly. There is already thousands of rows of data that used the regular autoincrement default.
I'm thinking I need to create a new column with a default of global autoincrement, fill it with data (number(*)), switch the PK to it, drop the old FK's, drop the old column, rename the new column to the old one, then re-apply the FK's.
Is there an easier way to accomplish what I need here?
thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这通常是解决问题的方法。但你的一些具体言论引起了我的担忧。还有顺序。我不确定您的经验水平,您使用的术语可能准确,也可能不准确。
对于每张桌子...
子表中的 FK 值怎么样?或者你的意思是你也会改变它们?
好吧,这就是限制。
您这到底是什么意思?将 FK 约束添加回 ?这不会更改现有数据,它将应用于添加的任何新行。
希望您明白我的意思您的任务顺序是可疑的。在删除父表中的 old_PK_column 之前,您需要:
在每个子表中添加删除的 FK 约束。
对于每个子表:将所有 FK 值更新到 new_PK_column。
然后删除 old_PK_column。
That's generally the way to go about it. But there are some specific statements you make that cause me concern. Also the sequence. I am not sure of your experience level, the terms you use may or may not be accurate.
For each table ...
What about the FK values in the child tables ? Or do you mean you will change them as well ?
Ok, that's the constraint.
What exactly do you mean by that ? Add the FK constraint back in ? That won't change the existing data, it will apply to any new rows added.
Hope you see what I mean by the sequence of your tasks is suspect. Before you drop the old_PK_column in the parent, you need to:
Add the dropped FK constraints in each child table.
For each child table: UPDATE all the FK values to the new_PK_column.
Then drop the old_PK_column.
您只是更改 PK 值的生成方式,因此只需:
使用 1,000,0000 的分区大小
还要确保在每个数据库中设置全局数据库标识符,例如:
因此将生成下一个 PK是 10,000,001
you're just changing the way PK values are generated, so it's enough to:
to use a partition size of 1,000,0000
Also make sure you set the global database identifier in each db, for example:
So the next PK that will be generated is 10,000,001