MySQL表需要ID吗?

时间:2011-03-03 22:55:03

标签: mysql primary-key

  

可能重复:
  Should each and every table have a primary key?

如果您从未在任何地方提及ID,是否需要包含ID?表需要ID还是主键?

6 个答案:

答案 0 :(得分:13)

不,你没有需要主键,使表在MySQL中运行。也就是说,主键允许一个唯一值从另一个表或使用该表的任何代码中引用表中的行。

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

答案 1 :(得分: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. 主键应尽可能小。
  4. 作为旁注:如果表上没有PK,某些SQL编辑器和工具可能会出现问题。

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

答案 2 :(得分:2)

默认情况下,MySQL(InnoDB引擎)使用主键来确定数据在主数据文件中的物理存储顺序。如果没有主键,MySQL会自动添加一个隐藏的AUTOINCREMENT列作为pkey。这可能会导致性能问题,因为在插入过程中,唯一的自动增量值就像所有插入的全局锁一样。主键还用于将表的所有索引与主数据文件相关联。因此,主键在每个索引的每一行中都会被复制。

答案 3 :(得分:0)

ID不是必需的,也不是主键,但它是关系数据库模型的基本概念。例如,您通常不想尝试使用名称作为键。

还找到了:ID fields in SQL tables: rule or law?

答案 4 :(得分:0)

这不是一项要求,但如果您将来可能引用此表中的任何数据,那么将一个数据作为主键是一个非常好的主意。

答案 5 :(得分:-1)

通过" ID",我认为你的意思是"标识符" - 唯一标识数据库表中的行的内容。它们也被称为密钥,这是数据库设计中使用的更简洁的技术术语。

实现密钥至少可以实现两个重要的事情:密钥可以防止冗余,从而防止异常数据进入您的表;密钥确保数据的使用者可以准确地识别,使用和更新表中的信息。出于这些原因,是的,您应该在表中创建密钥。