【发布时间】:2011-01-14 06:46:31
【问题描述】:
我正在尝试在 2 个表之间进行同步: 我有具有 auto_increment 的活动表,并且我有具有相同值的存档表。 我希望两个 ID 都是唯一的(在表之间也是如此) - 我的意思是,我想保存自动增量,如果我联合两个表,我仍然有唯一性。我怎样才能做到这一点? mysql关闭时是否有可能保存自动增量?
【问题讨论】:
标签: mysql unique archive auto-increment
我正在尝试在 2 个表之间进行同步: 我有具有 auto_increment 的活动表,并且我有具有相同值的存档表。 我希望两个 ID 都是唯一的(在表之间也是如此) - 我的意思是,我想保存自动增量,如果我联合两个表,我仍然有唯一性。我怎样才能做到这一点? mysql关闭时是否有可能保存自动增量?
【问题讨论】:
标签: mysql unique archive auto-increment
首先,这听起来是个坏主意 - 您的存档表中不应该有 auto_increment,因为所有数据都可能直接从实时表中复制(包括其 ID)。
但是,这里有一些 hacky 解决方案:
您可以使用以下方法更改表的当前AUTO_INCREMENT:
ALTER TABLE tbl_name AUTO_INCREMENT = some_new_value
为其中一张桌子设置一个较大的偏移量,您会安全一段时间。除非你到达偏移量,忘记了这个小技巧,整个纸牌屋都会落在你的头上。
在其中一个表中选择(例如SELECT id + 1000000 AS id)时,您可以简单地通过常量添加偏移量。仍然是一个 hack,但至少它更接近表面,当你最终到达重叠区域时,它更容易修复。
最后,您可以从一个表中选择最大 ID,然后在同一选择期间将另一表中的所有 ID 偏移此值。不过,请确保您有足够大的 ID 数据类型。
【讨论】:
AUTO_INCREMENT,并且正在复制带有 ID 的数据,那么为什么存档首先会有冲突的 ID?如果每次都从头生成活表,可以在CREATE语句中设置AUTO_INCREMENT。
AUTO_INCREMENT 的当前值。如果您插入 10 条记录,删除它们,然后再插入 10 条,则后者的 ID 为 11-20。
AUTO_INCREMENT 索引,但对于 InnoDB 的行为是不同的(每次重置为最大值)。如果您使用 InnoDB,则必须在每次重新启动时刷新 AUTO_INCREMENT,方法是使用 ALTER TABLE 并将其设置为两个表的最大值。