2011-10-06 15 views
5

Estoy trabajando en la implementación de una función para evitar la eliminación de ciertos elementos en una base de datos (a través del front end) si tienen otros elementos asociados con ellos en otras tablas. De lo contrario, esas otras tablas están buscando claves que no están allí.MySQL: ¿Cómo encontrar dónde se usa una clave primaria específica como clave externa en otras tablas?

Si entiende que mi sombrero ante usted.

que tienen muchos conjuntos de tablas de mirar a través y necesitan una consulta de SQL o una función de MySQL Workbench que me puede decir, en la entrada de la clave primaria (nombre de la columna, no el valor real), si esa clave es usado como una clave externa en otro lugar.

De lo contrario, si alguien conoce una solución improvisada, que sería grande también!

+0

posible duplicado de [MySQL:? ¿Cómo puedo encontrar todas las tablas que tienen las claves externas que hacen referencia en particular table.column y tienen valores de esas claves externas] (http://stackoverflow.com/questions/806989/mysql-how -to-i-find-all-tables-that-have-foreign-keys-that-reference-particular) – Johan

+0

¿Por qué no simplemente intentas eliminar el elemento y detectar cualquier error que obtengas de la violación FK? –

+0

Ver: http://dev.mysql.com/doc/refman/5.0/en/table-constraints-table.html (específico) y http://dev.mysql.com/doc/refman/5.0/en/ information-schema.html (en general) – Johan

Respuesta

4
SELECT 
    table_name, column_name  
FROM 
    information_schema.key_column_usage 
WHERE 
    referenced_table_name = '<table>' 
    and referenced_column_name = '<primary key column>' 
+0

key_column_usage no existe? – spuriosity

+0

Eso es probablemente debido a que el nombre de usuario que se está conectando con el no tiene los derechos de acceso para ver la tabla .. – StevieG

+0

lo siento, destinado a actualizar, tuvo que abrir de nuevo mi interfaz, que fue atrapado dentro del esquema (al azar, no lo hacen ¡pedir!). De todos modos, lo encontré y usé tu código, pero estoy obteniendo el siguiente error: Código de error: 1054. Columna desconocida 'operator'system' en 'where clause'. el sistema operativo es un nombre de tabla y está bajo el nombre de tabla referenciado en la consulta ... – spuriosity

0

Una solución se describe en this post para recuperar esta información de la tabla INFORMATION_SCHEMA.

1) Si desea trabajar en estas tablas a partir de su código, y luego buscarlos como un contenedor, por ejemplo ArrayList en el código y realizar su lógica.

2) Si desea trabajar en estas tablas a partir de su procedimiento almacenado, a continuación, utilizar tablas temporales a achive el mismo trabajo que haría en el código Java a través de contenedores.

+0

Voy a buscarlos con Hibernate y ponerlos en una ArrayList – spuriosity

Cuestiones relacionadas