webentwicklung-frage-antwort-db.com.de

der Fremdschlüssel kann nicht gelöscht werden

Ich möchte den Fremdschlüssel in meiner Tabelle ablegen, war aber in dieser Fehlermeldung

mysql> alter table customers drop foreign key customerid;
ERROR 1025 (HY000): Error on rename of '.\products\customers' to '.\products\#sql2-7ec-a3' (errno: 152)
mysql>
25
solomon

Verwenden Sie den Einschränkungsnamen anstelle des Spaltennamens des Fremdschlüssels, um zu vermeiden, dass dieser Fehler beim Versuch angezeigt wird, einen Fremdschlüssel zu löschen.

Als ich es versuchte

mysql> ALTER TABLE mytable DROP PRIMARY KEY;

Ich habe Fehler als

ERROR 1025 (HY000): Error on rename of '.\database\#sql-454_3' to '.\database\mytable' (errno: 150).

Ich habe es gelöst mit:

mysql> ALTER TABLE mytable DROP PRIMARY KEY, ADD PRIMARY KEY (column1,column2,column3);

Einige Links, die Ihnen helfen werden.

link 1

link 2 [suchen Geschrieben von Alex Blume am 7. November 2008, 17:09 Uhr & Geschrieben von Hector Delgadillo am 21. Januar 2011, 4:57 Uhr]

6
Fahim Parkar

Die Lösung hier von Chris White hat für mich funktioniert. 

Das Hauptproblem ist, dass MySQL sowohl einen Index als auch einen Fremdschlüssel erstellt. Beide müssen entfernt werden (der Fremdschlüssel steht im Gegensatz zu dem, was Chris gesagt hat).

  1. show create table Tabellenname;

    SHOW CREATE TABLE `table_name`:
    
    | table_name | CREATE TABLE `table_name` (
      `id` int(20) unsigned NOT NULL auto_increment,
      `key_column` smallint(5) unsigned default '1',
      KEY `column_tablein_26440ee6` (`key_column`),  <--- shows key name
      CONSTRAINT `table_name_ibfk_1` FOREIGN KEY (`key_column`) REFERENCES <--- shows foreign key constraint name
    `second_table` (`id`) ON DELETE SET NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
    
  2. Löschen Sie die Fremdschlüsseleinschränkung:

    ALTER TABLE table_name DROP FOREIGN KEY `table_name_ibfk_1`;
    
  3. Löschen Sie den Schlüssel

    ALTER TABLE table_name DROP KEY `column_tablein_26440ee6`;
    

Das hat es für mich getan. 

33
bbrame

Es sieht aus wie ein Fehler in der Fehlermeldung von MySQL. ( http://bugs.mysql.com/bug.php?id=10333 )

Verwenden Sie SHOW CREATE TABLE table_name, um den tatsächlichen Namen des Fremdschlüssels anzuzeigen. Es scheint, dass es ein Problem mit dem MySQL-Abfrage-Browser sein könnte, wenn die Abfrage mit falscher Schreibweise des Fremdschlüsselnamens erzeugt wird.

7
Amarnasan

Verwenden Sie den Einschränkungsnamen anstelle des Spaltennamens des Fremdschlüssels, um zu vermeiden, dass dieser Fehler beim Versuch angezeigt wird, einen Fremdschlüssel zu löschen

1
Maksym Polshcha

Sie sollten es mit dem Fremdschlüsselnamen versuchen, wie von Fahim Parkar vorgeschlagen. Eigentlich klappt das auch nicht immer.

In meinem Fall habe ich die

FOREIGN KEY `fk`(`col1`) REFERENCES `table2`(`col1`)

code, um die fk durch Erstellung hinzuzufügen.

Das Problem bei diesem Code ist, dass er nicht gültig ist und eine Art Syntaxfehler auslösen sollte, dass jedoch ein Fremdschlüssel mit einem zufälligen Namen hinzugefügt wurde.

Wenn ich die fk mit der richtigen Syntax hinzugefügt habe:

CONSTRAINT `fk` FOREIGN KEY (`col1`) REFERENCES `table2`(`col1`)

der folgende Code hat es richtig fallen gelassen:

ALTER TABLE `table1` DROP FOREIGN KEY `fk`

Daher kann diese Art von Fehler auch auftreten, wenn Sie versuchen, einen Fremdschlüssel mit einem ungültigen Namen zu entfernen. Es ist wichtig, die Tabelleneigenschaften mit anzuzeigen

SHOW CREATE TABLE `table1`

und überprüfen Sie die Fremdschlüsselnamen, wenn Sie diese Art von Fehlern erhalten.

0
inf3rno