可更新的主要或唯一密钥

时间:2015-08-26 09:51:33

标签: mysql sql sql-update

有一张桌子。没有PK,2 FK,有一些任意数量的列。 不幸的是,FK在任何方面都不是唯一的。

添加新数据很简单。

如果我对其他col添加了唯一约束,则删除数据(找到一行)是可以的 (DELETE ... WHERE fk1=:fk1 AND fk2=:fk2 AND ucol=:ucol

如何处理UPDATE

我不能使用那种ucol,因为同样的ucol可能会受到改变。我有几个解决方案,但似乎都没有。

解决方法1:
把PK放在桌子上。使用它进行DELETE和UPDATE。删除会在其中产生很多漏洞,但这没有问题。从理论上讲,如果有一些重复删除,它可能会耗尽PK数字(int,unsigned int)。

Solution1a 使CK(fk1,fk2,一些新col)使用它来定位行。它与使用PK一样。

溶液2
使用时间戳和microtime / hash / unique key generator / something来填充新的唯一col。该col用作PK来定位UPDATE和DELETE的行。只有独特的算法能够完美地完成它才能表现出色。

我的问题: 还有更好的东西吗?这不需要花哨的算法,也没有溢出自动递增PK的风险......

-----------------编辑----------------
Solution2a
使用mysql UUID!它比创建自定义时间戳/ hash / something_unique要好得多(也更容易使用)。

0 个答案:

没有答案