我想构建一个数据库范围内的唯一 ID。该唯一 ID 应该是该数据库每个表中每一行的一个字段。
我考虑过几种方法:
创建一个带有自动增量字段的主表,并在每个其他表中创建一个触发器,例如:
“在这里插入之前,插入主表->获取自增值->并使用这个值作为这里的主键”
我以前见过这个,但它没有进行一次插入,而是进行了 2 次插入,我预计这不会那么高效。
向每个表添加一个字段
uniqueId
,并用 PHP 生成的整数填充此字段...类似于 unix-timestamp 加上一个随机数。但是我不得不使用
BIGINT
作为数据类型,这意味着大index_length
和大data_length
。类似于“uniqueId”的想法,但不是
BIGINT
我使用VARCHAR
并使用uniqid()
来填充它值(value)。
最佳答案
由于您正在征求意见...在您给出的三个想法中,我会“投票”给 uniqid()
解决方案。就执行而言(但可能不是实现)似乎成本很低。
一个更简单的解决方案(我认为)是在每个表中添加一个字段来存储一个 guid,并将该字段的默认值设置为生成 guid 的 MySQL 函数(我认为它是 UUID)。这让数据库为您完成工作。
并且本着随心所欲的精神……让某种离线进程异步填写 ID 是可能的。确保每个表都有适当的字段并使默认值为 0/空。然后离线进程可以简单地在每个表上运行一个查询来找到还没有唯一 ID 的行并填充它们。这样你就可以控制 ID 甚至使用某种递增的整数。当然,这要求您不需要在每次插入记录时立即使用唯一 ID。
关于php - 跨多个表维护唯一标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2150165/