385
En MySQL, ¿cómo obtengo una lista de todas las restricciones de clave externa que apuntan a una tabla en particular? una columna en particular? Esto es lo mismo que this Oracle question, pero para MySQL.¿Cómo veo todas las claves externas en una tabla o columna?
esto siempre me da un conjunto vacío, mientras que la consulta propuesta por el nodo a continuación funciona bien – Acute
@Acute: ¿Estás seguro de que estás preguntando sobre la tabla correcta? Si la consulta de Node funciona, entonces es probable que pregunte sobre la otra dirección (es decir, las teclas FROM mytable, no las teclas TO mytable.) ¿Esto esperaba que escribiera '
Parece que no entendí tu consulta, porque estaba preguntando por referencias de claves DESDE el
Si utiliza InnoDB y definido de FK podrías consultar en la base de datos INFORMATION_SCHEMA ej .:
Fuente
2008-10-14 15:26:08 Node
realidad, que apunta en la dirección equivocada. esa consulta muestra todas las claves foráneas que apuntan desde 'mytable', no todas las teclas foráneas que apuntan a 'mytable'. –
Este funciona mejor en mi caso. Necesito eliminar cada restricción de clave externa (y solo aquellas) de una tabla para poder cambiar el motor InnoDB MyISAM o NDB. –
Puede obtener claves externas en ambas direcciones desde la tabla REFERENTIAL_CONSTRAINTS. He agregado otra respuesta con la consulta. – ChrisV
La solución que se me ocurrió es frágil; depende de la convención de nomenclatura de django para claves externas.
Luego, en la cáscara,
Fuente
2008-10-14 15:35:08
Publicando en una vieja respuesta para agregar algo de información útil.
Tuve un problema similar, pero también quería ver el CONSTRAINT_TYPE junto con los nombres de columna y tabla REFERENCED. Así,
para ver todos FKs en la tabla:
Para ver todas las tablas y FKs en su esquema:
para ver todos los FKs en su base de datos:
¡Recuerde!
Esto está utilizando el motor de almacenamiento InnoDB. Si parece que no puede obtener ninguna clave externa para mostrar después de agregarlas, es probable que se deba a que sus tablas están usando MyISAM.
Para comprobar:
Para el montaje, utilice esto:
Fuente
2012-07-02 23:59:41 Andy
Esas consultas se ejecutan mucho más rápido (de 2 segundos a 0.0015 segundos) si especifica k.TABLE_SCHEMA = DATABASE() y k.TABLE_NAME = '
excelente respuesta. ¿Tienes alguna solución para MyISAM? –
MyISAM no es compatible con claves externas, desafortunadamente. http://dev.mysql.com/doc/refman/5.7/en/myisam-storage-engine.html – Andy
EDIT: Como se ha señalado en los comentarios, esta no es la respuesta correcta a la pregunta PO, pero es útil para conocer este comando. Esta pregunta apareció en Google por lo que estaba buscando, y pensé que dejaría esta respuesta para que los demás la encuentren.
que consideran que esta respuesta aquí: MySQL : show constraints on tables command
que necesitaba esta manera porque quería ver cómo funcionaba el FK, en lugar de sólo ver si existía o no.
Fuente
2013-06-11 16:27:32 CenterOrbit
Esto muestra todas las restricciones en '', no todas las restricciones que apuntan a ''. –
Barmar
Como dice @Barmar, esto es completamente incorrecto; mostrará las claves foráneas que pertenecen a la tabla especificada, pero no mostrará las teclas foráneas que señalan *** TO *** la tabla, que es lo que solicita la pregunta. No tengo idea de cómo esto consiguió 50 votos ascendentes; Supongo que las personas terminaron aquí cuando realmente estaban buscando la respuesta a la pregunta opuesta, encontraron su respuesta aquí de todos modos, y no se molestaron en leer la pregunta original (o incluso su título) antes de la votación ascendente. –
@MarkAmery: este es el primer resultado de 'mostrar claves externas mysql' en google, puede ser por eso;) – Jigar
Una forma rápida de una lista de sus FKs (referencias de clave externa) mediante el
Esta consulta no asumen que las restricciones y todos los que hacen referencia a tablas de referencia y están en el mismo esquema.
Añade tu propio comentario.
Fuente: el manual oficial de mysql.
Fuente
2013-06-13 02:37:19
Esta solución no sólo mostrar todas las relaciones, sino también el nombre de restricción, que se requiere en algunos casos (por ejemplo, dejar caer contraint):
Si desea comprobar las tablas de una base de datos específica, en el final de la consulta añada el nombre de la tabla:
del mismo modo, para un nombre de columna específica, añadir
al final de la consulta.
Inspirado por este post here
Fuente
2013-09-16 10:36:41 Panayotis
Como una alternativa a la respuesta del nodo, si se utiliza InnoDB y definido FK se podía consultar el ejemplo de base de datos INFORMATION_SCHEMA:
de claves externas de <mesa>, o
de claves ajenas a <mesa>
También puede obtener UPDATE_RULE y DELETE_RULE si lo desea.
Fuente
2013-12-12 12:02:24 ChrisV
Personalmente prefiero esta respuesta, ya que el uso de la tabla REFERENTIAL_CONSTRAINTS le proporciona la regla de actualización y cascada. +1 –
Al hacer un descubrimiento acerca de una tabla, no debe olvidar que las claves externas se pueden establecer ¡AMBAS maneras! – Encoder
Para encontrar todas las tablas que contienen una determinada clave externa como
employee_id
Fuente
2014-12-15 03:38:17
Usando REFERENCED_TABLE_NAME no siempre funciona y puede ser un valor NULL. La siguiente consulta puede trabajar en su lugar:
Fuente
2015-02-05 23:51:26 Hazok
Si también desea obtener el nombre de la columna de clave externa:
Fuente
2017-08-09 18:40:02 omarjebari
Cuestiones relacionadas