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

Eliminar registro de 2 tablas referenciales

Estas en el tema de Eliminar registro de 2 tablas referenciales en el foro de Mysql en Foros del Web. Hola que tal, me gustaria ver si me pueden ayudar un poco averiguar lo sgte: -Quiero saber como puedo elimar los registros que se encuentran ...
  #1 (permalink)  
Antiguo 02/07/2013, 17:04
 
Fecha de Ingreso: julio-2013
Mensajes: 2
Antigüedad: 10 años, 9 meses
Puntos: 0
Pregunta Eliminar registro de 2 tablas referenciales

Hola que tal, me gustaria ver si me pueden ayudar un poco averiguar lo sgte:

-Quiero saber como puedo elimar los registros que se encuentran en una tabla X y una tabla Y siendo que estan relacionadas por una PK y una FK.

por ej. tengo una tabla LOGIN y una tabla CLIENTE las cuales se relacionan.

La tabla LOGIN tiene una columna ID que es la clave primaria.
Y la tabla CLIENTE tiene la columna ID_LOGIN que es la clave foranea de login.


bueno, mi problema es que quiero en un momento eliminar un registro de la tabla cliente y de la tabla login a la vez, pero no puedo ya que me lo impide o la forma en que trato de hacerlo esta incorrecta.

Espero que me puedan ayudar a saber cual es la sentencia que debo utilizar.
gracias!!

Última edición por gnzsoloyo; 02/07/2013 a las 19:21 Razón: Ilegible.
  #2 (permalink)  
Antiguo 02/07/2013, 19:28
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: Eliminar registro de 2 tablas referenciales

Manual de referencia oficial de MySQL:
Cita:
Puede especificar múltiples tablas en un comando DELETE para borrar registros de una o más tablas dependiendo de una condición particular en múltiples tablas. Sin embargo, no puede usar ORDER BY o LIMIT en un DELETE de múltiples tablas.

La parte table_references lista las tablas involucradas en el join. Esta sintaxis se describe en Sección 13.2.7.1, “Sintaxis de JOIN”.

Para la primera sintaxis, sólo los registros coincidentes de las tablas listadas antes de la cláusula FROM se borran. Para la segunda sintaxis, sólo los registros coincidentes de las tablas listadas en la cláusula FROM (antes de la cláusula USING ) se borran. El efecto es que puede borrar registros para varias tablas al mismo tiempo y tienen tablas adicionales que se usan para buscar:
Código MySQL:
Ver original
  1. DELETE t1, t2 FROM t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id;
O:
Código MySQL:
Ver original
  1. DELETE FROM t1, t2 USING t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id;

Estos comandos usan las tres tablas al buscar registros a borrar, pero borrar los registros coincidentes sólo para las tablas t1 y t2.

Los ejemplos anteriores muestran inner joins usando el operador coma, pero comandos DELETE de varias tablas pueden usar cualquier tipo de join permitido por comandos SELECT tales como LEFT JOIN.

La sintaxis permite .* tras los nombres de tabla para compatibilidad con Access.

Si usa un comando DELETE de varias tablas incluyendo tablas InnoDB para las que hay restricciones de clave foránea, el optimizador MySQL puede procesar tablas en un orden ditinto del de su relación padre/hijo. En este caso, el comando falla y se deshace. En su lugar, debe borrar de una tabla úncia y confiar en la capacidad de ON DELETE que proporciona InnoDB para hacer que las otras tablas se modifiquen correctamente.

Nota: En MySQL 5.x, debe usar el alias (si se dió) al referirse a un nombre de tabla:
Siempre el manual es la primera y mejor opción...

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 03/07/2013, 04:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Eliminar registro de 2 tablas referenciales

Si sigues explorando el manual descubriras que al definir la FK puedes ponerle la propiedad ON DELETE CASCADE la cual te simplificaria la operación.

DELETE FROM LOGIN WHERE ID=XXX

Borraria el registro XXX de login y el/los registro/s relacionado/s de Clientes....

(La lógica a mi me parece inversa pero bueno tu sabras....)
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: registro, registros, tabla, 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 04:46.