2010-04-24 28 views

回答

9

它沒有改變比任何其他列不同 -

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

這改變了表pkeykeyfield被稱爲keyfield2 - 你必須在事後提供的定義,一如往常。

+12

此解決方案將導致錯誤150. – 2011-01-07 07:01:50

+4

這適用於沒有外鍵的情況。另一個答案建議傾銷/恢復整個數據庫,這將工作,但只是丟棄/重新創建爲我工作的外鍵/索引。 – penfold 2011-10-03 23:09:01

+0

同意@Pavel Rodionov,它會拋出以下錯誤:[HY000] [1025]將xxx重命名爲yyy(錯誤:150)的錯誤 – 2015-12-05 20:03:58

1

如果你正在使用InnoDB,那麼我認爲你不能重命名主鍵,至少你不能通過外鍵引用它們。您需要轉儲數據庫,重命名轉儲文件中的列和引用鍵,然後重新加載數據庫。

6

也許你有一個外鍵約束。您可以通過SET foreign_key_constraints=0禁用這些功能,但您必須記住事後更新數據庫。

+0

如何更改此值?之後我會改變價值1嗎? – 2017-04-13 14:04:45

+0

@RafaelGomesFrancisco你是什麼意思? – Alex 2017-04-17 17:40:07

3

可能是一個不好的做法。但你可以將你的整個數據庫導出到一個sql文本文件。查找並替換要重命名的PK,然後通過sql恢復數據庫。

3

離開alter語句的PRIMARY KEY部分。主鍵將自動更新。

+0

當你遇到意想不到的錯誤時,這個答案可以解決問題。大! – 2017-12-15 13:04:12

0

如果其他表在表上有外鍵,則不能使用alter table直接重命名該列,否則會引發以下錯誤:[HY000] [1025]將xxx重命名爲yyy(錯誤:150) 你必須:從其他表指向要重命名

  • 主鍵

    • 下降外鍵命名的主鍵
    • 國外列添加到其他表

    在Intellij中重命名錶時,它會生成代碼並刪除並添加外鍵。