即使行被删除,mysql中的id是否保证不重复?

fly*_*ire 2 mysql

当然,如果我最终放置了足够的行,就会重复。但假设我选择了一个足够大的 id 字段。

我想知道我是否可以假设 id 随着时间的推移唯一标识该行。如果客户端向我发送一个 id,我希望能够确定它引用的是哪一行,或者该行是否被删除(或者如果它是一个假 id,但在这种情况下,我不会关心错误地告诉我该行是已删除)。

另请参阅以下内容:如果我重新启动数据库,或备份和恢复 - 它将继续在其留下的位置创建 id - 或者可能会决定“填补漏洞”

thr*_*thr 5

如果您有一个从未重置的“int not null autoincrement 主键”,那么 yes ID 将不会被重用。

然而,这提出了一个有趣的问题 -如果您碰巧重用旧 ID(尽管在 MySQL 中默认情况下不会发生,但人为因素总是很重要),会发生什么?

如果您的数据库被正确规范化、级联约束,您的应用程序应该能够处理 ID 的重用。

编辑(既然你编辑了你的帖子,我将充实我的答案),关于这句话:“如果客户端向我发送一个 ID,我希望能够确定它引用的行或该行是否被删除”。如果 ID 未被删除,则始终可以确定它属于哪一行(这对于能够从数据库中提取信息至关重要)。

但是,如果 id 引用的行被删除,则无法确定它属于哪一行...因为它不存在。如果您需要这个,我建议您实现某种类型的审核功能,最好是通过触发器