MySQL表需要ID吗?

Joh*_*ith 7 mysql primary-key

可能重复:
每个表都应该有一个主键吗?

如果您从未在任何地方引用ID,是否需要包含一个?表需要ID还是主键?

Mat*_*ley 13

不,您不需要主键来使表在MySQL中工作.也就是说,主键允许唯一值从另一个表或使用该表的任何代码中引用表中的行.

你确实需要一个主键来使表在MySQL中运行良好.索引(主键是其中之一)允许MySQL搜索表的小型,高度优化的子集来处理关系和搜索.通常,您应该在WHERE子句中使用或用于将两个表链接在一起的任何字段都应编入索引.

  • 你已经争论过*索引*,不一定是(人工)*ID*列. (13认同)

Gal*_*alz 5

实际上,InnoDB 使用自己的行id作为表的PK,以防你没有创建一个,所以它可以用它来编制索引.这对性能有一些负面影响.

在这里看到一个非常好的解释:http://blog.johnjosephbachir.org/2006/10/22/everything-you-need-to-know-about-designing-mysql-innodb-primary-keys/

总结一下,有3条规则:

  1. 明确定义主键,并使其成为数字.
  2. 主键应该是顺序的.
  3. 主键应尽可能小.

作为旁注:如果表上没有PK,某些SQL编辑器和工具可能会出现问题.

在此类工具中手动编辑结果集或表数据时,该工具会运行UPDATE命令.如果没有唯一密钥,可以插入几个相同的记录,然后无法仅更新其中一个/一些.在SQL编辑器中,您可以手动编辑其中一条记录,但是当更新命令发送到mysql时 - 它将失败,或者更新所有相同的记录而不是那条记录.