【问题标题】:Modify autoincrement column to global autoincrement column将自增列修改为全局自增列
【发布时间】:2010-12-08 16:36:01
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

    标签: database sybase auto-increment


    【解决方案1】:

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

    对于每个表...

    ...将PK切换到它

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

    ...放弃旧的 FK 的

    好的,这就是约束。

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

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

    希望你明白我的意思,你的任务顺序是可疑的。在将 old_PK_column 放入父级之前,您需要:

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

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

    3. 然后删除 old_PK_column。

    【讨论】:

    • 你最后的 cmets(1,2,3)是我在其他术语中所说的。谢谢!会给你一个复选标记:)
    • @numone。谢谢!有其他问题,请留言。
    【解决方案2】:

    您只是改变了生成 PK 值的方式,因此足以:

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

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

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

    SET OPTION PUBLIC.global_database_id = 10;
    

    所以下一个将生成的PK是10,000,001

    【讨论】:

      猜你喜欢
      • 2011-12-02
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多