Mysql自动递增主键id';s

Mysql自动递增主键id';s,mysql,primary-key,auto-increment,Mysql,Primary Key,Auto Increment,我有一些mysql表,它们具有作为主键的自动递增id,但我注意到我从未实际使用过它们。。。我曾经认为每个表都必须有一个主键,所以我想这就是我以前创建它们的原因。如果我根本不使用它们,我应该全部删除它们吗?除非您遇到空间问题,否则我不会删除它们 如果您错误地(或疏忽地)用重复/错误的数据填充数据库,它们是一个救生圈 它们还有助于创建相关表,通过自动生成的id引用一个表上的内容 这是假设您有用于实际查询数据的其他列的索引(如果没有,那么就有更多的理由保留自动增量ID并使用它们!)。有趣!。。。 在这

我有一些mysql表,它们具有作为主键的自动递增id,但我注意到我从未实际使用过它们。。。我曾经认为每个表都必须有一个主键,所以我想这就是我以前创建它们的原因。如果我根本不使用它们,我应该全部删除它们吗?

除非您遇到空间问题,否则我不会删除它们

如果您错误地(或疏忽地)用重复/错误的数据填充数据库,它们是一个救生圈

它们还有助于创建相关表,通过自动生成的id引用一个表上的内容

这是假设您有用于实际查询数据的其他列的索引(如果没有,那么就有更多的理由保留自动增量ID并使用它们!)。

有趣!。。。 在这里,我似乎持有少数意见,无论是上票还是下票,目前都是0,但多数意见中的任何人(见上面的回答)似乎都没有理由保留id字段,而下层选民甚至没有留下评论来暗示为什么取消身份证是个坏主意

在他们的辩护中,我自己最初的回答没有包含任何有力的论据,说明为什么在某些情况下可以去掉id属性(这似乎适用于OP)。也许这种无缘无故的反应本身就是一种令人沮丧的反应

请务必教育我和OP,通过留下评论支持或反对u systemic(我强调“systemic”)需要在所有表中包含自动递增的非语义主键。我返回了一个承诺,并在回复中添加了一个原因列表,列出了为什么它可能对[再次,系统性地]实施自动递增PK有害的原因

我最初的回答: 当然!你可以移除这些

在对数据库执行任何操作之前,请确保有备份,尤其是数据库大小非常重要

使用该语句删除要删除的表中的id。特别是
ALTER TABLE myTable DROP列id (如果表具有PK约束,则在删除id之前还需要删除PK约束)

编辑(稍后添加)
在许多情况下,携带自动递增的ID密钥是没有意义的,不管这些密钥增加的额外存储需求相对较少。
在所有这些情况下,潜在的含义是

  • 要么数据本身提供主键
  • 或者,应用程序管理密钥生成
数据中“本机”提供的键不一定是单列键,它可以是复合键,尽管在这些情况下,人们可能希望更仔细地研究情况,尤其是整体键有点长

以下是使用自动递增主键代替本机键或应用程序提供的键的一些缺点:

  • 有效的数据完整性可能未经检查
    i、 e.服务器可能允许记录插入更新,从而创建重复的[本机]密钥(尽管人工的、自动递增的主键隐藏了这一事实)
  • 当依赖自动递增的PK来支持表之间的联接时,当必须更新部分[本机]键值时…
    …我们可以创建完整删除记录的需要,然后使用新闻值重新插入该记录,
    …或保留过时/不正确链接的风险
  • 具有自动递增键的常见“后续”操作是在表上为此键创建聚集索引。 这对于没有本机主键或应用程序提供的主键的表是有意义的,对于具有此类键的数据集也是如此。 这有效地防止了为聚集索引选择一个键,这可能对最常见的查询模式更有利
  • 根据DBMS的不同,使用自动递增键迁移表可能会变得更加困难(需要在复制之前将基础列声明为纯整数,然后需要再次启动自动递增…)
  • 对于窄表,即只有几列的表,自动递增PK的相对成本可能非常大,并且以不可忽略的方式影响性能
  • 在相关表中插入新记录和相关记录时,需要在插入主记录后获得自动递增键,然后才能插入相关记录;当支持链接的列值提前已知时,逻辑更简单
总而言之,只要存储器能够承载人工主键的[相对最小的]额外“重量”,我们就应该包括并使用这样一个键,这种想法本身并非没有缺点

最后要考虑的是,就像在我们不需要这些密钥时很容易移除它们一样,当/如果它们在特定情况下很明显有用时,也可以很容易地在事后添加它们两种重构形式(添加或删除自动递增的列)都不是无风险的,但这两种重构都不是主要的产品

你应该保留它们;数据库总是需要能够区分一行和另一行的东西(某种类型的“键”)


如果您有保证每一行都是唯一的东西,那么您可以将其用作键;否则保留主键和自动生成的ID。

我个人会保留它们。如果您以后扩展数据库设计并需要引用此表,它们将特别有用。

是的,如果您可以找到另一个主键

你的桌子设计显然有缺陷。例如,你有一张像这样的桌子
关系id(PK)、父id、子id
。 众所周知,父项的组合