2012-07-25 21 views
11

Estoy tratando de dejar caer una serie de claves externas usando:MySQL gota de error de clave externa 152

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

pero devuelve el error:

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

He corrido SHOW ENGINE INNODB STATUS que 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' resultado:

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 

Sin embargo, cuando miro la estructura a través de phpmyadmin lista la clave externa con el mismo nombre. ¿Tengo que hacer algo más antes de poder soltar las claves externas?

+0

Por favor, publique el resultado de la tabla '' SHOW CREATE TABLE ';' '. – eggyal

+0

@eggyal editó mi publicación con la salida – xylar

+3

No veo * ninguna * restricción de clave externa allí ... – eggyal

Respuesta

10

No hay claves externas. Consulte MySQL documentation que dice

KEY is normally a synonym for INDEX. 

Así que, básicamente, en la tabla que ha creado índices, no las llaves extranjeras. For Foreign Key info, Click here

+0

Una pequeña pero posiblemente buena: tuve este problema. Usando esta respuesta, me comprobé por mi cuenta y noté que intenté eliminar la CLAVE que se necesita para la restricción. Una pequeña corrección en la declaración 'drop' para cambiar el nombre del nombre de la clave por el nombre de la restricción, ¡y violla! –

0
clave externa

primera gota continuación, elimine la columna

alter table 'nombre de la tabla' gota clave externa 'id restricción;

si usted no sabe Identificación limitación crear volcado de la base de que la restricción ID está disponible en archivo de volcado ..

continuación, elimine la columna ..

0

El nombre del índice y el nombre de la restricción puede no ser el mismo. Debe eliminar la restricción primero con el código: ALTER TABLE tablename DROP FOREIGN KEY constraintname

2

Debe eliminar temporalmente la restricción para poder eliminarla.

SET FOREIGN_KEY_CHECKS = 0;

y luego vuelva a encenderlos después de eliminar la clave externa:

SET FOREIGN_KEY_CHECKS = 0;

+0

Probablemente quiera decir '= 1' en la última línea;) – BusyAnt

Cuestiones relacionadas