修改自增列为全局自增列

发布于 2024-10-07 07:16:42 字数 260 浏览 2 评论 0原文

我们公司使用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

任谁 2024-10-14 07:16:42

这通常是解决问题的方法。但你的一些具体言论引起了我的担忧。还有顺序。我不确定您的经验水平,您使用的术语可能准确,也可能不准确。

对于每张桌子...

...将 PK 切换到它

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

...放弃旧的 FK

好吧,这就是限制。

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

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

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

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

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

  3. 然后删除 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 ...

... switch the PK to it

What about the FK values in the child tables ? Or do you mean you will change them as well ?

... drop the old FK's

Ok, that's the constraint.

... drop the old column, rename the new column to the old one, then re-apply the FK's.

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:

  1. Add the dropped FK constraints in each child table.

  2. For each child table: UPDATE all the FK values to the new_PK_column.

  3. Then drop the old_PK_column.

尘曦 2024-10-14 07:16:42

您只是更改 PK 值的生成方式,因此只需:

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

使用 1,000,0000 的分区大小

还要确保在每个数据库中设置全局数据库标识符,例如:

SET OPTION PUBLIC.global_database_id = 10;

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

you're just changing the way PK values are generated, so it's enough to:

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

to use a partition size of 1,000,0000

Also make sure you set the global database identifier in each db, for example:

SET OPTION PUBLIC.global_database_id = 10;

So the next PK that will be generated is 10,000,001

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文