elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Saber con que tabla esta relacionada.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Saber con que tabla esta relacionada.  (Leído 13,172 veces)
Baaaw Oic

Desconectado Desconectado

Mensajes: 79


Ver Perfil
Saber con que tabla esta relacionada.
« en: 3 Marzo 2010, 15:44 pm »

Tengo una BD con InnoDB, la tabla personal esta unida a usuario.

Código
  1. CREATE TABLE personal (
  2.  codigo INT NOT NULL AUTO_INCREMENT,
  3.  dni VARCHAR(8) NOT NULL,
  4.  nombres VARCHAR(30) NOT NULL,
  5.  apellidos VARCHAR(30) NOT NULL,
  6.  fecnac DATE NOT NULL,
  7.  fecreg DATE NOT NULL,
  8.  telefono VARCHAR(11) NULL,
  9.  direccion TEXT NOT NULL,
  10.  sexo CHAR(1) NOT NULL,
  11.  foto CHAR(4) NULL,
  12.  PRIMARY KEY(codigo)
  13. )
  14. TYPE=InnoDB;
  15.  
  16. CREATE TABLE usuario (
  17.  codigo INT NOT NULL AUTO_INCREMENT,
  18.  usu_crea INT NOT NULL,
  19.  car_codigo INT NOT NULL,
  20.  per_codigo INT NOT NULL,
  21.  idusuario VARCHAR(20) NULL,
  22.  fecreg DATE NULL,
  23.  estado CHAR(1) NULL,
  24.  PRIMARY KEY(codigo),
  25.  INDEX usuario_FKIndex1(per_codigo),
  26.  INDEX usuario_FKIndex2(car_codigo),
  27.  INDEX usuario_FKIndex3(usu_crea)
  28. )
  29. TYPE=InnoDB;

Quiero saber si existe la forma de saber el nombre de la tabla a travez de una relacion ... por ejemplo cuando hago un show columns from usuario me aparece en la columna PRI la caracteristica MUL (esto indica que es una relacion) .. apartir de eso quiero saber si existe alguna forma de saber el nombre de la tabla y el campo que se unen con esa relacion.

Gracias.


En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: Saber con que tabla esta relacionada.
« Respuesta #1 en: 3 Marzo 2010, 16:09 pm »

Citar
MUL (esto indica que es una relacion)

MUL indica que un indice puede contener valores repetidos no unicos. Digase un indice UNIQUE no puede contener valores repetidos pero, si puede contener valores NULL repetidos que es lo que indica MUL que un indice puede contener valores repetidos  ;)


Citar
quiero saber si existe alguna forma de saber el nombre de la tabla y el campo que se unen con esa relacion.

SHOW TABLE STATUS\G

SHOW CREATE TABLE nombre_tabla\G



En línea

Baaaw Oic

Desconectado Desconectado

Mensajes: 79


Ver Perfil
Re: Saber con que tabla esta relacionada.
« Respuesta #2 en: 3 Marzo 2010, 16:12 pm »

Entonces MUL no simpre significa que sera un FK .. si es asi entonces cual es la forma indicada para saber cuando es una FK.

EDITO:

Esto no anda..
Citar
SHOW TABLE STATUS\G

Esto anda .... lo da muy detallado
Citar
SHOW CREATE TABLE nombre_tabla\G

Existe otra forma de hacerlo ¿?

Gracias
« Última modificación: 3 Marzo 2010, 16:16 pm por Baaaw Oic » En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.724


<3


Ver Perfil WWW
Re: Saber con que tabla esta relacionada.
« Respuesta #3 en: 3 Marzo 2010, 16:24 pm »

Algo como estó?
Código
  1. DECLARE @NombreTabla AS VARCHAR(50)
  2. SET @NombreTabla = 'tblUsuario'
  3.  
  4. SELECT FK.TABLE_NAME AS 'Nombre Tabla',
  5.   CU.COLUMN_NAME AS 'Columna Llave Foranea',
  6.   PK.TABLE_NAME AS 'Tabla Llave Primaria',
  7.   PT.COLUMN_NAME AS 'Columna Llave Primaria',
  8.   C.CONSTRAINT_NAME AS 'Entidad Relación'
  9. FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
  10.  INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK
  11.    ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
  12.  INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK
  13.    ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
  14.  INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
  15. ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
  16.  INNER JOIN( SELECT TC.TABLE_NAME, CU.COLUMN_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
  17. INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
  18.   ON TC.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
  19. WHERE TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
  20.  ) PT
  21.    ON PT.TABLE_NAME = PK.TABLE_NAME
  22.  WHERE PK.TABLE_NAME = @NombreTabla
Resultado:
Código:
tblPrestamos	intIDUsuario	tblUsuario	intID	FK_tblPrestamos_tblUsuario
tblReservas intIDUsuario tblUsuario intID FK_tblReservas_tblUsuario
tblSanciones intIDUsuario tblUsuario intID FK_tblSanciones_tblUsuario
En línea

Te vendería mi talento por poder dormir tranquilo.
^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: Saber con que tabla esta relacionada.
« Respuesta #4 en: 3 Marzo 2010, 16:28 pm »

Citar
Entonces MUL no simpre significa que sera un FK .. si es asi entonces cual es la forma indicada para saber cuando es una FK.

MUL no hace referencia a cuando un indice es una llave foreanea o no, es sencillamente una caracteristica de ese indice que dice que ese campo puede guardar valores repetidos que pueden ser NULL o pueden ser valores reales repetidos (siempre y cuando ese indice no sea UNIQUE sino INDEX o KEY)

No me consta que existe la caracteristica FK en las descripciones de las tablas, ya que esto no es una caracteristica de un indice.

Citar
Esto no anda..
Citar
SHOW TABLE STATUS\G

No??? que version de MySQL es??

Bueno te sirve SHOW CREATE como ya viste y igual te sirve indagar en el esquema information_schema :

select * from tables where table_name = 'tu_tabla'\G

Si existe una forma de utilizar alguna clausula de descripcion en una tabla para que te exponga su relacion de FK con otra tabla, yo particularmente no la he visto, existen consultas como las que te expongo que te muestran esa informacion, pero en la descripcion basica de una tabla (DESCRIBE TABLE) no...

Ah no ser que hagas uso de las consultas que te digo, o guardar esa info en variables como expone tooRllehS@xelA   o crear un procedimiento, una funcion UDF en fin... para guardar esto. Pero particularmente existe un comando dentro ya del motor para ello... No hasta lo que me consta.
En línea

Baaaw Oic

Desconectado Desconectado

Mensajes: 79


Ver Perfil
Re: Saber con que tabla esta relacionada.
« Respuesta #5 en: 3 Marzo 2010, 16:33 pm »

Versión del cliente: 5.0.51a
Supongo que tengo que reemplazar TABLE_CONSTRAINTS por referential_constraints

No anda :S

« Última modificación: 3 Marzo 2010, 16:41 pm por Baaaw Oic » En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: Saber con que tabla esta relacionada.
« Respuesta #6 en: 3 Marzo 2010, 16:38 pm »

Código
  1.  
  2. DECLARE @NombreTabla AS VARCHAR(50);
  3. SET @NombreTabla = 'tblUsuario';
  4.  
  5. SELECT FK.TABLE_NAME AS 'Nombre Tabla',
  6.   CU.COLUMN_NAME AS 'Columna Llave Foranea',
  7.   PK.TABLE_NAME AS 'Tabla Llave Primaria',
  8.   PT.COLUMN_NAME AS 'Columna Llave Primaria',
  9.   C.CONSTRAINT_NAME AS 'Entidad Relación'
  10. FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
  11.  INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK
  12.    ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
  13.  INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK
  14.    ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
  15.  INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
  16. ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
  17.  INNER JOIN( SELECT TC.TABLE_NAME, CU.COLUMN_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
  18. INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
  19.   ON TC.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
  20. WHERE TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
  21.  ) PT
  22.    ON PT.TABLE_NAME = PK.TABLE_NAME
  23.  WHERE PK.TABLE_NAME = @NombreTabla
  24.  
  25.  
  26.  

No te olvides del punto y coma que separa las consultas  ;)
En línea

Baaaw Oic

Desconectado Desconectado

Mensajes: 79


Ver Perfil
Re: Saber con que tabla esta relacionada.
« Respuesta #7 en: 3 Marzo 2010, 16:41 pm »

QUe version debo usar .. la ultima mejor estable ¿?
En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: Saber con que tabla esta relacionada.
« Respuesta #8 en: 3 Marzo 2010, 16:49 pm »

Dependera tus necesidades... pero al menos al partir de la 5.0.1 es mejor porque puedes tener procedimientos, crons adentro del motor, funciones, etc. Pero dependera si vas o no a dar uso de esto... al menos me consta que para MySQL 5.4.x, Oracle se empeno en mejorar sobremanera y optimizar los motores InnoDB para las consultas JOINS y Subconsultas.


Por cierto, te convendria crear un procedimiento y guardar la consulta ante expuesta, asi solo te basta con llamar el procedimiento para ver que FK tiene cual tabla:

Código
  1.  
  2. delimiter /
  3.  
  4. CREATE PROCEDURE procedimiento(IN tabla CHAR(30))
  5. BEGIN
  6.  
  7. SELECT FK.TABLE_NAME AS 'Nombre Tabla',
  8.   CU.COLUMN_NAME AS 'Columna Llave Foranea',
  9.   PK.TABLE_NAME AS 'Tabla Llave Primaria',
  10.   PT.COLUMN_NAME AS 'Columna Llave Primaria',
  11.   C.CONSTRAINT_NAME AS 'Entidad Relación'
  12. FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
  13.  INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK
  14.    ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
  15.  INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK
  16.    ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
  17.  INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
  18. ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
  19.  INNER JOIN( SELECT TC.TABLE_NAME, CU.COLUMN_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
  20. INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
  21.   ON TC.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
  22. WHERE TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
  23.  ) PT
  24.    ON PT.TABLE_NAME = PK.TABLE_NAME
  25.  WHERE PK.TABLE_NAME = tabla
  26.  
  27. );
  28. /
  29.  
  30. delimiter ;
  31.  

Mas o menos algo asi... quisiera acomodartelo para ver si funciona pero ando en el trabajo  ;)  luego cada vez que quieras ver las Fk de una tabla.. llamas el procedimiento pasandole como parametro el nombre de la tabla que quieres ver.

CALL procedimiento(tu_tabla);
En línea

Baaaw Oic

Desconectado Desconectado

Mensajes: 79


Ver Perfil
Re: Saber con que tabla esta relacionada.
« Respuesta #9 en: 3 Marzo 2010, 17:35 pm »

Pues el proc me tira error porque al parecer los campos de la version que tienen es diferente a la que yo tengo ... actualmente tengo el AppServ AppServ 2.5.10 que tiene:

    *  Apache 2.2.8
    * PHP 5.2.6
    * MySQL 5.0.51b
    * phpMyAdmin-2.10.3

Que version estas usando tu tooRllehS@xelA
Gracias.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
saber una tabla necesita ser modificada
Ingeniería Inversa
chinosf 1 2,710 Último mensaje 25 Febrero 2011, 03:23 am
por apuromafo CLS
Duda relacionada con particiones
GNU/Linux
tremolero 5 3,604 Último mensaje 29 Mayo 2012, 02:26 am
por flacc
ayuda relacionada con facebook
Mensajería
notforgiveit 1 3,016 Último mensaje 4 Diciembre 2012, 04:50 am
por notforgiveit
¿Cómo saber si tu dirección IP está relacionada con una red zombie?
Redes
wolfbcn 8 20,382 Último mensaje 10 Abril 2015, 11:39 am
por zomig
Introducir esta tabla UTF-8
.NET (C#, VB.NET, ASP)
Meta 0 1,884 Último mensaje 5 Abril 2022, 22:00 pm
por Meta
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines