【问题标题】:How do I rename a primary key column in MySQL?如何重命名 MySQL 中的主键列?
【发布时间】:2011-02-11 18:52:30
【问题描述】:

如何在 MySQL 中重命名主键列?

【问题讨论】:

    标签: mysql primary-key rename


    【解决方案1】:

    这与更改任何其他列没有什么不同 --

    ALTER TABLE `pkey` CHANGE `keyfield` `keyfield2` INT( 11 ) NOT NULL AUTO_INCREMENT 
    

    这会将表pkey 中的keyfield 列更改为keyfield2——之后您必须像往常一样提供定义。

    【讨论】:

    • 这在没有外键时有效。另一个答案建议转储/恢复整个数据库,这将起作用,但只是删除/重新创建外键/索引对我有用。
    • 同意@Pavel Rodionov,它会抛出以下错误:[HY000][1025] 将 xxx 重命名为 yyy 时出错(错误号:150)
    【解决方案2】:

    如果您正在使用 InnoDB,那么我认为您不能重命名主键,至少如果它们被外键引用,您就不能。您需要转储数据库,重命名转储文件中的列和引用键,然后重新加载数据库。

    【讨论】:

      【解决方案3】:

      也许你有一个外键约束。您可以通过SET foreign_key_constraints=0 禁用它们,但您必须记住之后更新数据库。

      【讨论】:

      • 我如何改变这个值?之后我会更改值 1 吗?
      • @RafaelGomesFrancisco 你是什么意思?
      【解决方案4】:

      可能是一种不好的做法。但是您可以将整个数据库导出到一个 sql 文本文件。找到并替换要重命名的PK,然后通过sql恢复数据库。

      【讨论】:

        【解决方案5】:

        省略alter 语句的PRIMARY KEY 部分。主键会自动更新。

        【讨论】:

        • 当您遇到意外错误时,此答案可以解决问题。太好了!
        【解决方案6】:

        如果其他表在你的表上有外键,你不能直接用alter table重命名列,会抛出如下错误:[HY000][1025] Error on rename of xxx to yyy (errno: 150) 你必须:

        • 从其他表中删除指向要重命名的主键的外键
        • 重命名主键
        • 将外部列添加到其他表中

        在 Intellij 中重命名表时,它会为您生成删除和添加外键的代码。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-01-02
          • 2011-09-05
          • 2016-08-23
          • 2013-12-13
          • 2022-01-01
          相关资源
          最近更新 更多