我想构建一个数据库范围的唯一ID。该唯一ID应该是该数据库的每个表中每一行的一个字段。
我考虑过一些方法:
创建一个主表,其中包含自动增量字段和每个其他表中的触发器,如:
“在此处插入之前,插入主表 - >获取自动增量值 - >并在此处将此值用作主键”
我以前见过这个,但是它没有进行一次INSERT,而是进行2次INSERTS,我认为这不会是那种性能。
在每个表中添加一个字段uniqueId
,并使用PHP生成的整数填充此字段...类似于unix-timestamp加上一个随机数。
但我必须使用BIGINT
作为数据类型,这意味着大index_length
和大data_length
。
与“uniqueId”相似,但是BIGINT
的instad我使用VARCHAR
并使用uniqid()
来填充此值。
答案 0 :(得分:2)
既然你正在寻找意见......在你提出的三个想法中,我会为uniqid()
解决方案“投票”。在执行方面似乎成本相当低(但可能没有实现)。
一个更简单的解决方案(我认为)只是在每个表中添加一个字段来存储guid,并将字段的默认值设置为MySQL的函数,生成一个guid(我认为它是UUID)。这使数据库可以为您完成工作。
本着提出随机创意的精神......有可能让某种离线流程异步填写ID。确保每个表都有适当的字段,并使默认值为0 /空。然后,离线进程可以简单地在每个表上运行查询,以查找尚未具有唯一ID的行,并且可以填充它们。这将允许您控制ID,甚至使用某种递增整数。当然,这要求您每次插入记录时都不需要唯一的ID。