簡體   English   中英

MySQL報告主鍵,但是不能從表中刪除它

[英]MySQL reports a primary key but can not drop it from the table

我正在更新數據庫中的某些表,並且使用以下代碼檢查主鍵並將其刪除然后添加新的主鍵。

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

運行時出現此錯誤:

1091-無法刪除'PRIMARY'; 檢查列/鍵是否存在SQL = ALTER TABLE`my_table` DROP PRIMARY KEY,ADD PRIMARY KEY(`id`);

經過一番谷歌搜索后,我發現這個問題出現在像2006年這樣的MySQL錯誤報告表格中,所以我認為現在可以解決該問題。 MySQL錯誤我的SQL版本是5.1.44,所以不是太舊了……看來列看起來像主鍵,但不是主鍵……所以我想知道是否有更好的方法來檢查在嘗試刪除之前,請先防止該錯誤。

我在一些Drupal論壇上也看到了這一點,但沒有給出解決方法的任何線索...

如果您認為更多有關周圍的代碼將有助於讓我知道,那么我會補充。

它正在嘗試刪除名為PRIMARY的鍵。 盡管我不確定為什么它不起作用(因為文檔清楚地顯示了DROP PRIMARY KEY ),但是您可以嘗試將SQL更改為:

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

嘗試刪除“添加主鍵”,並將其作為附加的sql調用。

嘗試翻轉訂單:

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`);

這使我無休止。 當我跑步時:

mysql> describe my_table;

我有:

+-------------+------------+-----+
| Field       | Type       | Key |
+-------------+------------+-----+
| FIELD_ONE   | datetime   |     |
| FIELD_TWO   | char(6)    | PRI |
| FIELD_THREE | int        | PRI |
+-------------+------------+-----+

但是,當我運行ALTER TABLE my_table DROP PRIMARY KEY ,我收到了Can't DROP 'PRIMARY'; check that column/key exists Can't DROP 'PRIMARY'; check that column/key exists錯誤。

因此,我跑了:

mysql> SHOW INDEX FROM my_table;

並且在Key_name列中有一個舊鍵(使用的表列甚至不再存在!?)。 於是我跑了:

mysql> ALTER TABLE my_table DROP old_key_that_does_not_exist;

...而且有效! 我重新運行DESCRIBE my_table並得到:

+-------------+------------+-----+
| Field       | Type       | Key |
+-------------+------------+-----+
| FIELD_ONE   | datetime   |     |
| FIELD_TWO   | char(6)    |     |
| FIELD_THREE | int        |     |
+-------------+------------+-----+

運行InnoDB版本5.7.23。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM