2010-11-02 17 views
69

Quindi sto provando ad aggiungere una chiave primaria a una delle tabelle nel mio database . In questo momento ha una chiave primaria come questa:# 1025 - Errore durante la rinomina di './database/#sql-2e0f_1254ba7' in './database/table' (errno: 150)

PRIMARY KEY (user_id, round_number) 

Dove userid è una chiave esterna.

Sto cercando di cambiarlo a questo:

PRIMARY KEY (user_id, round_number, created_at) 

Sto facendo questo in phpMyAdmin facendo clic sull'icona della chiave primaria nella visualizzazione struttura della tabella.

Questo è l'errore che ottengo:

#1025 - Error on rename of './database/#sql-2e0f_1254ba7' to './database/table' (errno: 150) 

Si tratta di un database MySQL con il motore InnoDB.

+1

Una ricerca rapida con Google mi dà l'idea che questo problema è legato ai vincoli. Possibili collegamenti utili: http://dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.html e http://www.simplicidade.org/notes/archives/2008/03/mysql_errno_150. html – Lekensteyn

risposta

124

Probabilmente esiste un'altra tabella con una chiave esterna che fa riferimento alla chiave primaria che si sta tentando di modificare.

Per scoprire quale tabella ha causato l'errore è possibile eseguire SHOW ENGINE INNODB STATUS e quindi guardare la sezione LATEST FOREIGN KEY ERROR.

+0

Nel mio caso, il database è stato appena creato, senza tabelle. –

20

Per coloro che stanno ottenendo questa domanda via google ... questo errore può anche accadere se si tenta di rinominare un campo che funge da chiave esterna.

28

Come è stato detto prima è necessario rimuovere gli FK. Su Mysql fare in questo modo:

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`; 

ALTER TABLE `table_name` DROP INDEX `id_name_fk`; 
+1

La tua risposta mi ha davvero aiutato. DROP FOREIGN KEY ha risolto il problema. Grazie –

13

Per evitare che questa in phpMyAdmin o con MySQL, prima rimuovere il vincolo di chiave esterna prima di rinominare l'attributo.

(per gli utenti phpMyAdmin: Per rimuovere FK vincola in phpMyAdmin, selezionare l'attributo quindi fare clic su "Visualizza rapporto" accanto a "versione stampabile" nella barra degli strumenti sotto la struttura della tabella)

+1

Penso che questa sia la risposta più accurata – MontrealDevOne

3

Se si sta tentando di eliminare un colonna che è una FOREIGN KEY, devi trovare il nome corretto che non è il nome della colonna. Ad esempio: se sto tentando di eliminare il campo server nella tabella degli allarmi, che è una chiave esterna della tabella dei server.

  1. SHOW CREATE TABLE alarm; Cercare la linea CONSTRAINT `server_id_refs_id_34554433` FORIEGN KEY (`server_id`) REFERENCES `server` (`id`).
  2. ALTER TABLE `alarm` DROP FOREIGN KEY `server_id_refs_id_34554433`;
  3. ALTER TABLE `alarm` DROP `server_id`

Ciò eliminerà il server chiave esterna dalla tabella allarmi.

3

Ho avuto questo problema, è per la chiave esterna

Cliccare sulla Relation View (come l'immagine qui sotto) quindi trovare il nome del campo che si sta per rimuoverlo, e sotto la Foreign key constraint (INNODB) colonna, basta mettere la selezione su nulla!Significa nessuna chiave esterna

enter image description here

Speranza che funziona!

0

Se si aggiunge una chiave esterna e si è verificato questo errore, potrebbe essere il valore nella tabella figlio non presente nella tabella padre.

Diciamo che per la colonna a cui deve essere aggiunta la chiave esterna ha tutti i valori impostati su 0 e il valore non è disponibile nella tabella a cui si fa riferimento.

È possibile impostare un valore che è presente nella tabella padre e quindi l'aggiunta di chiave esterna ha funzionato per me.

Problemi correlati