【问题标题】:Saving auto increment in MySQL在 MySQL 中保存自动增量
【发布时间】:2011-01-14 06:46:31
【问题描述】:

我正在尝试在 2 个表之间进行同步: 我有具有 auto_increment 的活动表,并且我有具有相同值的存档表。 我希望两个 ID 都是唯一的(在表之间也是如此) - 我的意思是,我想保存自动增量,如果我联合两个表,我仍然有唯一性。我怎样才能做到这一点? mysql关闭时是否有可能保存自动增量?

【问题讨论】:

    标签: mysql unique archive auto-increment


    【解决方案1】:

    首先,这听起来是个坏主意 - 您的存档表中不应该有 auto_increment,因为所有数据都可能直接从实时表中复制(包括其 ID)。

    但是,这里有一些 hacky 解决方案:

    1. 您可以使用以下方法更改表的当前AUTO_INCREMENT

      ALTER TABLE tbl_name AUTO_INCREMENT = some_new_value
      

      为其中一张桌子设置一个较大的偏移量,您会安全一段时间。除非你到达偏移量,忘记了这个小技巧,整个纸牌屋都会落在你的头上。

    2. 在其中一个表中选择(例如SELECT id + 1000000 AS id)时,您可以简单地通过常量添加偏移量。仍然是一个 hack,但至少它更接近表面,当你最终到达重叠区域时,它更容易修复。

    3. 最后,您可以从一个表中选择最大 ID,然后在同一选择期间将另一表中的所有 ID 偏移此值。不过,请确保您有足够大的 ID 数据类型。

    【讨论】:

    • 嘿,谢谢!我没有存档 auto_incremenet... 仅在活动中。所以您建议从存档表中选择 MAX id 并修改活动的 auto_increment 以从该点开始?
    • 如果您在存档中没有AUTO_INCREMENT,并且正在复制带有 ID 的数据,那么为什么存档首先会有冲突的 ID?如果每次都从头生成活表,可以在CREATE语句中设置AUTO_INCREMENT
    • 可以说我有 1 到 10 的活动 ID。我将它们原样移动到存档中,下次启动 Mysql 时,它将再次用 1 到 10 填充它们,所以我将它们再次复制到存档时会出现问题。
    • 除非您重新创建表,否则默认保存AUTO_INCREMENT 的当前值。如果您插入 10 条记录,删除它们,然后再插入 10 条,则后者的 ID 为 11-20。
    • MyISAM 表在服务器重新启动之间确实保留了它们的AUTO_INCREMENT 索引,但对于 InnoDB 的行为是不同的(每次重置为最大值)。如果您使用 InnoDB,则必须在每次重新启动时刷新 AUTO_INCREMENT,方法是使用 ALTER TABLE 并将其设置为两个表的最大值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多