Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

No puedo eliminar datos de una tabla relacionada

Estas en el tema de No puedo eliminar datos de una tabla relacionada en el foro de Mysql en Foros del Web. Buenas noches, Tengo tablas InnoDB y sé que no puedo borrar un registro de una tabla cuya PK es FK de otra tabla, mientras la ...
  #1 (permalink)  
Antiguo 03/10/2010, 15:24
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
No puedo eliminar datos de una tabla relacionada

Buenas noches,

Tengo tablas InnoDB y sé que no puedo borrar un registro de una tabla cuya PK es FK de otra tabla, mientras la otra tabla todavía conserve registros relacionados con la primera (integridad referencial)... pero el tema está en que las otras tablas que tienen la FK no tienen datos.

Estoy intentando eliminar una tabla que tiene un PK.

Mis tablas secundarias, las cuales tienen la FK relacionada con la PK de la tabla que quiero borrar, no tienen datos y las cree de la siguiente forma

Código SQL:
Ver original
  1. CREATE  TABLE IF NOT EXISTS `prueba`.`tbl_registro` (
  2.   `user_id` INT UNSIGNED NOT NULL ,
  3.   `fecha_registro` TIMESTAMP NOT NULL ,
  4.   `ip_registro` VARCHAR(15) NOT NULL ,
  5.   `url_referer` VARCHAR(200) NULL ,
  6.   `user_referido` VARCHAR(25) NULL ,
  7.   INDEX `fk_tbl_registro_tbl_user1` (`user_id` ASC) ,
  8.   CONSTRAINT `fk_tbl_registro_tbl_user1`
  9.     FOREIGN KEY (`user_id` )
  10.     REFERENCES `prueba`.`tbl_user` (`user_id` )
  11.     ON DELETE NO ACTION
  12.     ON UPDATE NO ACTION)
  13. ENGINE = InnoDB;

Debo modificar la forma que las cree para que me permita borrar mi tabla principal (la que contiene la PK, en este caso tbl_user)?

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 04/10/2010, 15:10
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: No puedo eliminar datos de una tabla relacionada

Alguien puede indicarme cómo debo hacer para que me permita borrar mi tabla principal si en el resto de tablas que la relacionan están vacías?

¿La única solución es volver a declarar las tablas que relacionan a mi tabla principal poniendo las FK en cascada?

Muchas gracias de antemano!
  #3 (permalink)  
Antiguo 04/10/2010, 15:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: No puedo eliminar datos de una tabla relacionada

¿Borrar o vaciar?
No puedes borrar la tabla sin eliminar primero las restricciones de FK que están en las otras tablas, porque son parte de la estructura de las tablas. No solamente es una cuestión de valores.
Vaciarla, si. Si no hay registros en las otras tablas, se puede vaciar la principal sin problemas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 04/10/2010, 16:48
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: No puedo eliminar datos de una tabla relacionada

Cita:
Iniciado por gnzsoloyo Ver Mensaje
¿Borrar o vaciar?
No puedes borrar la tabla sin eliminar primero las restricciones de FK que están en las otras tablas, porque son parte de la estructura de las tablas. No solamente es una cuestión de valores.
Vaciarla, si. Si no hay registros en las otras tablas, se puede vaciar la principal sin problemas.
He probado de vaciarla
truncate table tbl_user;

Y me aparece el siguiente error

Cannot delete or update a parent row: a foreign key constraint fails (`prueba`.`tbl_user_personal`, CONSTRAINT `fk_user_personal_user` FOREIGN KEY (`user_id`) REFERENCES `tbl_user` (`user_id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

Entonces he vaciado primero la tabla tbl_user_personal y entonces si que me dejó vaciar la tabla tbl_user

Pero si no hubiese vaciado estas tablas, ¿Cómo puedo eliminar las restricciones? haciendo un

ALTER TABLE tu_tabla
DROP CONSTRAINT tu_foreign_key

??

Otra pregunta más... ¿Cómo debería hacer para que si elimino un registro de una tabla se elimine todas sus entradas en las demás tablas?

Código SQL:
Ver original
  1. CREATE TABLE `tbl_user_preferencias` (
  2.   `user_id` INT(10) UNSIGNED NOT NULL,
  3.   `user_lang` CHAR(3) COLLATE utf8_spanish_ci DEFAULT 'esp',
  4.   `hide_email` CHAR(1) COLLATE utf8_spanish_ci DEFAULT '0',
  5.   KEY `fk_user_id_user_preferencias_user` (`user_id`),
  6.   CONSTRAINT `fk_user_id_user_preferencias_user` FOREIGN KEY (`user_id`) REFERENCES `tbl_user` (`user_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
Muchas gracias de antemano
  #5 (permalink)  
Antiguo 04/10/2010, 17:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: No puedo eliminar datos de una tabla relacionada

Cita:
Otra pregunta más... ¿Cómo debería hacer para que si elimino un registro de una tabla se elimine todas sus entradas en las demás tablas?
Tienes que modificar todas las relaciones de FK que apunten a esa tabla. Cada declaración de FK debe contener la cláusula ON DELETE CASCADE.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: eliminar, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:01.