我想理解mysql语法为什么不允许在同一个表中使用两个主键的原因。我理解复合键,这与此无关。
我不明白为什么同一个表中不允许有两个单独的主键。但我们可以将一列作为主键,而将另一列作为唯一列,而不是空列。它实际上有两个不同的主键,因为我们可以使用这些键中的任何一个来清楚地标识行。为什么第一个是不允许的,而第二个是允许的?
我想弄明白其中的逻辑,但无意中发现了codd的12条规则中的第2条。
通过表名、主键值和列名的组合,保证关系数据库中的每个数据(原子值)都可以在逻辑上访问。
表名、主键值和列的组合对于单个基准值是唯一的还是可以有多个组合来保证访问?为什么或者为什么不?
编辑:由于这个问题被认为可能是重复的,我将在下面解释它是如何不同的
其他类似的问题是
一个表中可以有多个主键吗?
答案是否定的。
我的问题是为什么?理由是什么?
根据规则2,CODD打算说什么?
如果允许多个单独的主键,会出现什么问题?

最佳答案

您可以拥有数据库系统允许的尽可能多的唯一键约束,许多关系纯粹主义者现在认为提升其中一个键并将其重新命名为primary是一个错误。
从逻辑上讲,唯一键约束和主键都实现了相同的目的——定义列的子集,通过该子集可以唯一地标识行。它们也应该有资格成为外键约束的目标。
某些默认值(例如可空性)由主键约束自动应用,但没有理由不能对包含在唯一键约束中的列手动应用相同的约束。

关于mysql - 为什么不允许表中有两个主键?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50112095/

10-11 22:35
查看更多