我已经看到几乎每个数据库条目都有一个自动递增的ID字段。
这真的需要吗?
如果没有,它有什么用?
答案 0 :(得分:5)
以后查找特定行很有用。如果您有其他值保证每行唯一,则您不一定需要额外的id列,因为您可以使用另一列作为主(唯一)键。
但是,自动递增id列的优点是它是
a)每行唯一,和
b)永远不要改变。
以StackOverflow为例。每个问题都有一个ID(这个是6886017),并使用URL中的ID和标题。因此,很容易有两个具有相同标题的问题,因为它们的ID仍然是唯一的。您甚至可以更改问题的标题,旧的链接仍然可以使用,因为StackOverflow实际上正在查看的是URL的ID部分,而不是标题部分。
答案 1 :(得分:3)
不,它并不是真的需要,但如果另一个表中的一行需要引用该行,那么这是一种相当好的方法(唯一的就是在该表中,至少)标识该行。
答案 2 :(得分:1)
方便(WHERE id = 123
而不是WHERE name = 'blah' and somethingelse = 'foo'
)除此之外,整数索引通常非常高效。字符串索引。除此之外
答案 3 :(得分:1)
使用关系数据库时,您需要能够唯一地标识每一行。在许多情况下,您可以选择一个或模式数据列,以便为您唯一标识一行。这称为natural key
。如果您没有简单的方法来识别每一行,那么您可以引入自己的专栏,其唯一目的就是进行此识别。这叫做synthetic key
,这是你要问的自动增量的id列。
只要您有另一种方法来识别每一行,就不需要它。可能有一些行彼此难以区分,但这会大大降低关系数据库范例的价值。此外,它不必是自动递增的数字。通常使用唯一的id字符串,例如UUID。
答案 4 :(得分:1)
“ID”表示标识符。在关系数据库设计的上下文中,关系中的元组(行)可以通过键唯一地标识,并且每个关系必须至少具有一个键。
没有密钥的表将允许重复的行,这会导致模糊,不准确的结果以及正确识别行要描述的真实世界实体的问题。因此,密钥是任何数据库表的数据完整性的重要方面。
但请注意,不的键必须是单列,也不必是“自动递增”。这些功能与为桌子选择好的按键没什么关系。
答案 5 :(得分:0)
不是必须的,但是非常推荐。它对于保持行唯一索引,更新,删除等非常有用。
以下是一些有用的信息: http://en.wikipedia.org/wiki/Unique_key
答案 6 :(得分:0)
ID字段通常是该字段的主键。它标识该特定表中的特定字段,主键不能重复。它还可以用作外键来帮助连接表。
以下是一个简单的介绍:http://www.opensourcevarsity.com/mysqldba/l8primaryforeignkey