在多个表中保持唯一ID

时间:2010-01-27 20:54:11

标签: php mysql

我想构建一个数据库范围的唯一ID。该唯一ID应该是该数据库的每个表中每一行的一个字段。

我考虑过一些方法:

  • 创建一个主表,其中包含自动增量字段和每个其他表中的触发器,如:

    “在此处插入之前,插入主表 - >获取自动增量值 - >并在此处将此值用作主键”

    我以前见过这个,但是它没有进行一次INSERT,而是进行2次INSERTS,我认为这不会是那种性能。

  • 在每个表中添加一个字段uniqueId,并使用PHP生成的整数填充此字段...类似于unix-timestamp加上一个随机数。

    但我必须使用BIGINT作为数据类型,这意味着大index_length和大data_length

  • 与“uniqueId”相似,但是BIGINT的instad我使用VARCHAR并使用uniqid()来填充此值。

1 个答案:

答案 0 :(得分:2)

既然你正在寻找意见......在你提出的三个想法中,我会为uniqid()解决方案“投票”。在执行方面似乎成本相当低(但可能没有实现)。

一个更简单的解决方案(我认为)只是在每个表中添加一个字段来存储guid,并将字段的默认值设置为MySQL的函数,生成一个guid(我认为它是UUID)。这使数据库可以为您完成工作。

本着提出随机创意的精神......有可能让某种离线流程异步填写ID。确保每个表都有适当的字段,并使默认值为0 /空。然后,离线进程可以简单地在每个表上运行查询,以查找尚未具有唯一ID的行,并且可以填充它们。这将允许您控制ID,甚至使用某种递增整数。当然,这要求您每次插入记录时都不需要唯一的ID。