2012-07-25 15 views
11

Sto cercando di eliminare un certo numero di chiavi esterne utilizzando:MySQL goccia Errore chiave esterna 152

ALTER TABLE `table` DROP FOREIGN KEY `fk_table_users1` , DROP FOREIGN KEY `fk_table_accounts1` , DROP FOREIGN KEY `fk_table_data1` ; 

ma restituisce l'errore:

Error on rename of './db/table' to './db/#sql2-179c-288289' (errno: 152) 

Ho eseguito SHOW ENGINE INNODB STATUS che dice:

120725 12:38:37 Error in dropping of a foreign key constraint of table db/table, 
in SQL command 
ALTER TABLE `table` DROP FOREIGN KEY `fk_table_users1` , DROP FOREIGN KEY `fk_table_accounts1` , DROP FOREIGN KEY `fk_table_data1` 
Cannot find a constraint with the given id fk_table_users1. 

SHOW CREATE TABLE 'table' output:

CREATE TABLE `table` (
`id` int(11) NOT NULL auto_increment, 
`data_id` int(11) NOT NULL, 
`account_id` int(11) NOT NULL, 
`status` enum('pending','complete') NOT NULL default 'pending', 
`created_at` datetime NOT NULL, 
`created_by` int(11) NOT NULL, 
PRIMARY KEY (`id`), 
KEY `fk_orders_users1` (`created_by`), 
KEY `fk_orders_data1` (`data_id`), 
KEY `fk_orders_accounts1` (`account_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

Tuttavia, quando guardo la struttura tramite phpmyadmin, elenca la chiave esterna con lo stesso nome. Devo fare qualcos'altro prima di poter lasciare le chiavi esterne?

+0

Si prega di postare l'output di '' SHOW CREATE TABLE 'table';' '. – eggyal

+0

@eggyal ha modificato il mio post con l'output – xylar

+3

Non vedo * nessun * vincolo di chiave esterna lì ... – eggyal

risposta

10

Non ci sono chiavi esterne. Fare riferimento MySQL documentation che dice

KEY is normally a synonym for INDEX. 

Quindi, fondamentalmente nella tabella di aver creato gli indici, non chiavi esterne. For Foreign Key info, Click here

+0

Una piccola ma probabilmente buona: ho avuto questo problema. Usando questa risposta ho controllato due volte e ho notato che ho tentato di cancellare il KEY che è necessario per il vincolo. Una piccola correzione nell'istruzione 'drop' per cambiare il nome dal nome della chiave al nome del vincolo - e violla! –

0
chiave esterna

prima goccia quindi eliminare colonna

alter tabella 'nome tabella' goccia chiave esterna 'vincolo id;

se non si conosce vincolo id creare dump del database in quel vincolo ID è disponibile in file di dump ..

quindi eliminare colonna ..

0

Il nome di indice e il nome del vincolo non può essere lo stesso. È necessario eliminare prima il vincolo utilizzando il codice: ALTER TABLE tablename DROP FOREIGN KEY constraintname

2

È necessario eliminare temporaneamente il vincolo in modo da poterlo rimuovere.

SET FOREIGN_KEY_CHECKS = 0;

e accenderli nuovamente dopo si rilascia la chiave esterna:

SET FOREIGN_KEY_CHECKS = 0;

+0

Probabilmente vuoi dire = = 1' nell'ultima riga;) – BusyAnt

Problemi correlati