MySQL - Obtener las tablas relacionadas

   
Vista:

Obtener las tablas relacionadas

Publicado por Javier (2 intervenciones) el 28/06/2015 08:00:49
Hola. Tengo una tabla Empleado en MySql la cual tiene un campo codec definido como clave foranea. Esta clave relaciona a Empleado con la tabla Estadocivil por el campo codec.
Por codigo php intento eliminar un registro con por ejemplo codec = 1 y obtengo el error 1451 ya que la clave foranea esta definida como Restrict al hacer un delete. Ahora lo que queria saber es como hacer para visualizar el nombre de las tabla relacionada que es Empleado en este caso. Con mysqli_errno() obtengo el numero de error (1451) pero existirá una funcion o mecanismo para obtener el nombre de la(s) tabla(s) relacionada(s)?
Desde ya muchas gracias!!!
Javier
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Obtener las tablas relacionadas

Publicado por xve (898 intervenciones) el 28/06/2015 18:32:47
Hola Javier, para sacar la información de una base de datos en concreto seria algo así:
1
2
3
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
CONSTRAINT_SCHEMA="MiBaseDatos";

Si lo quieres unicamente de una tabla:
1
2
3
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
CONSTRAINT_SCHEMA="MiBaseDatos" AND TABLE_NAME="MiTabla";


Espero que te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener las tablas relacionadas

Publicado por Javier (2 intervenciones) el 29/06/2015 00:50:09
Hola xve! Gracias por tu respuesta. Lo que me indicas seria para obtener las claves foraneas de una determinada tabla. Lo que yo necesitaria es saber el nombre de la tabla. Este dato es necesario para el select que compartiste.
El nombre de la tabla es el que necesito obtener. Volviendo a mi ejemplo anterrior, necesito saber que tablas tiene relacionadas la tabla Empleado, suponiendo que no sabes cuales son y son en estas ultimas donde justamente se definen las claves foráneas.
Nuevamente muchas gracias tu tiempo.
Javier.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener las tablas relacionadas

Publicado por leonardo_josue (81 intervenciones) el 29/06/2015 17:25:34
Hola Javier:

Si te hubieras tomado un poco más de tiempo para investigar en la ayuda de MySQL, o a partir de la información que te dio XVE, habrías encontrado que lo que quieres obtener está en la tabla de sistema KEY_COLUMNS_USAGE:

https://dev.mysql.com/doc/refman/5.7/en/key-column-usage-table.html

Checa este ejemplo, supongamos que tienes estas dos tablas:

1
2
3
4
5
6
7
8
9
10
11
12
sql> CREATE TABLE tabla_padre (id_padre INT UNSIGNED NOT NULL AUTO_INCREMENT,
  ->                           descripcion VARCHAR(20),
  ->                           PRIMARY KEY(id_padre));
ery OK, 0 rows affected (0.33 sec)
 
sql> CREATE TABLE tabla_hija (id_hija INT UNSIGNED NOT NULL AUTO_INCREMENT,
  ->                          id_padre INT UNSIGNED NOT NULL,
  ->                          descripcion VARCHAR(20),
  ->                          PRIMARY KEY(id_hija),
  ->                          FOREIGN KEY (id_padre) REFERENCES tabla_padre(id_padre)
  ->                          ON DELETE RESTRICT);
ery OK, 0 rows affected (0.39 sec)

Si quieres saber con qué tablas está relacionada la tabla_hija, haces algo como esto:

1
2
3
4
5
6
7
8
9
10
11
mysql> SELECT table_name, column_name, referenced_table_name, referenced_column_name
    -> FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
    -> WHERE table_schema = 'pruebas' AND
    ->       table_name = 'tabla_hija' AND
    ->       referenced_table_name IS NOT NULL;
+------------+-------------+-----------------------+------------------------+
| table_name | column_name | referenced_table_name | referenced_column_name |
+------------+-------------+-----------------------+------------------------+
| tabla_hija | id_padre    | tabla_padre           | id_padre               |
+------------+-------------+-----------------------+------------------------+
1 row in set (0.00 sec)

Dale un vistazo no solo a lo que contiene esta tabla, sino TODAS LAS TABLAS DE SISTEMA... no te conformes sólo con encontrar la solución a un problema, DOCUMENTATE lo más que puedas por si en un futuro tienes otro problema.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar