2011-11-28 46 views
2

我正在更新我的數據庫中的一些表的過程中,我使用下面的代碼來檢查主鍵並放下它,然後添加一個新的主鍵。MySQL報告主鍵,但不能從表中刪除它

if(strpos($value,'PRIMARY') !== false) 
{ 
    $dropit = "DROP PRIMARY KEY ,"; 
    $query = "ALTER TABLE `".$tablename."` ".$dropit." ADD PRIMARY KEY (`".$name."`);" ; 
} 

當我跑我得到這個錯誤:

1091 - Can't DROP 'PRIMARY'; check that column/key exists SQL=ALTER TABLE `my_table` DROP PRIMARY KEY , ADD PRIMARY KEY (`id`);

一些google搜索後,我已經看到了這個問題出現在MySQL的錯誤報告形成像2006年那麼我會想到這會被解決現在。 MySQL Bugs我的SQL版本是5.1.44,所以不是超級老...好像列可以看起來像主鍵但不是主鍵...所以我想知道是否有更好的方法來檢查之前我嘗試刪除以防止出現錯誤。

我也看到了這對一些Drupal的論壇,但沒有任何線索如何解決給定的...

如果您想更多周圍的代碼將有助於讓我知道,我會加的。

+0

我們需要更多的背景:什麼持有'$ value'變量?你爲什麼放棄創建PK? –

+0

顯然不是讀取'主鍵'的整個值。如果你截斷查詢來簡單地刪除pk而不讀取新的。那它有用嗎? – nageeb

+0

刪除「添加主鍵('。」。$ name。「')」不會導致錯誤仍然存​​在。 – Cleanshooter

回答

3

它試圖刪除名爲PRIMARY的密鑰。雖然我不知道爲什麼它不工作(如docs清楚地顯示DROP PRIMARY KEY),你可以試着改變你的SQL語句是這樣的:

ALTER TABLE `my_table` DROP KEY `key_name`, ADD PRIMARY KEY (`id`); 
+0

它看起來像:[drop key \'PRIMARY \']也可以。主鍵似乎被自動重命名爲「PRIMARY」... – 2011-11-28 21:50:04

+1

由於某種原因,這工作...我開始懷疑它是否僅僅是我的開發環境(MAC上的XAMPP) – Cleanshooter

1

嘗試刪除「添加主鍵」,並將其作爲額外的sql調用。

1

嘗試翻轉順序:

query = "ALTER TABLE `".$tablename."` ADD PRIMARY KEY(`".$name."`), DROP PRIMARY KEY; 

的SQL是這樣的,並且能夠改變一個表的主鍵在一個聲明:

alter table `sometable` add primary key(`newcolumn`), drop PRIMARY key; 

拆分爲2個語句也可以,但是隨後喲你可能會失去一些原子性,這取決於你的環境。

貌似這也適用,而不是依靠陌生感行爲才能正常工作:

alter table sometable drop key `PRIMARY`, add primary key(`somecolumn`); 
+0

問題是我總是有如果它已經存在,那麼放棄這個密鑰...如果我先將它添加,我什麼都不會做...... – Cleanshooter

+0

實際上,如果您翻轉訂單,它們都會在相同的語句中執行,只是語句實際上可行......兩種操作發生,我能夠使用此SQL更改表的主鍵。 – 2011-11-28 21:41:09

+0

我明白,這工作,但不是你只是放棄你剛剛添加的主鍵?我需要放棄假定存在的PRIMARY KEY並將其替換爲新的PRIMARY KEY ...您的代碼似乎是自我毀滅的......但我不是MySQL專家,所以也許它有用IDK – Cleanshooter