How do I see all foreign keys to a table or column?
In MySQL, how do I get a list of all foreign key constraints pointing to a particular table? a particular column? This is the same thing as this Oracle question, but for MySQL.
14 Answers 14
For a Table:
For a Column:
Basically, we changed REFERENCED_TABLE_NAME with REFERENCED_COLUMN_NAME in the where clause.
@Acute: Are you sure you are asking about the correct table? If Node’s query work, then you are likely asking about the other direction (i.e., keys FROM mytable, not keys TO mytable.) This expecting you wrote ‘
‘ with the table name and without the ‘ ‘?
Seems like I misunderstood you query, because I was querying for keys referencing FROM the
🙂 (yes, I wrote table name instead of »
» XD)
EDIT: As pointed out in the comments, this is not the correct answer to the OPs question, but it is useful to know this command. This question showed up in Google for what I was looking for, and figured I’d leave this answer for the others to find.
I needed this way because I wanted to see how the FK functioned, rather than just see if it existed or not.
If you use InnoDB and defined FK’s you could query the information_schema database e.g.:
Posting on an old answer to add some useful information.
I had a similar problem, but I also wanted to see the CONSTRAINT_TYPE along with the REFERENCED table and column names. So,
To see all FKs in your table:
To see all the tables and FKs in your schema:
To see all the FKs in your database:
Remember!
This is using the InnoDB storage engine. If you can’t seem to get any foreign keys to show up after adding them it’s probably because your tables are using MyISAM.
Those queries run much faster (from 2 secs to 0.0015 secs) if you specify k.TABLE_SCHEMA = DATABASE() and k.TABLE_NAME = ‘
‘ on the WHERE clause, as documented here dev.mysql.com/doc/refman/5.5/en/…
As an alternative to Node’s answer, if you use InnoDB and defined FK’s you could query the information_schema database e.g.:
for foreign keys from
, or
for foreign keys to
You can also get the UPDATE_RULE and DELETE_RULE if you want them.
Constraints in SQL are the rules defined for the data in a table. Constraints also limit the types of data that go into the table. If new data does not abide by these rules the action is aborted.
You can view all constraints by using select * from information_schema.table_constraints;
(This will produce a lot of table data).
You can also use this for MySQL:
This solution will not only display all relations but also the constraint name, which is required in some cases (e.g. drop contraint):
If you want to check tables in a specific database, at the end of the query add the schema name:
Likewise, for a specific column name, add
at the end of the query.
Inspired by this post here
Using REFERENCED_TABLE_NAME does not always work and can be a NULL value. The following query can work instead:
A quick way to list your FKs (Foreign Key references) using the
This query does assume that the constraints and all referenced and referencing tables are in the same schema.
How to see foreign keys related to a table in MySql?
Background : I wanted to drop a table in MySql which has a foreign key constraint. When I do it I get this:
Error Code: 1217. Cannot delete or update a parent row: a foreign key constraint fails
How can I drop foreign keys related to the table leaving others.
4 Answers 4
Firstly, find out your FOREIGN KEY constraint name in this way:
You can also add (to the WHERE clause) if you have more than one table called My_Table in different schemas.
And then you can remove the named constraint in the following way:
In MySql 5.7. You can find table relations and relations rules.
Editied the Query above. Changed Referenced Table name to Table Name as Referenced Table name is the table which is being referenced and hence the result of the original query wont show you the foreign keys on your table.
You can directly execute this query’s output to drop the constraint of referenced table.
Первичный ключ может быть любое поле или столбец таблицы, который должен быть уникальным и не нулевое значение для каждой записи или строке.
Внешний ключ представляет собой поле, которое содержит первичный ключ некоторой другой таблицы, чтобы установить связь между друг другом.
Давайте посмотрим на синтаксис и различные примеры для создания первичных и внешних ключей в MySQL.
Основные ключи
Мы можем создать первичный ключ для сегмента таблицы, используя ALTER TABLE.
Первичный ключ при создании таблицы
Предположим, мы хотим создать таблицу books в MySQL, которая содержит идентификатор, имя и категорию книги, в которой столбец идентификатора будет первичным ключом.
Запрос на создание такой таблицы и создание столбца идентификатора столбца первичного ключа будет таким:
В этом синтаксисе мы можем определить ограничения в конце запроса.
В столбце ключа мы видим, что book_id установлен как первичный ключ таблицы.
Отбросить первичный ключ
Вместо добавления, если мы хотим удалить или отбросить первичный ключ, используется команда ALTER.
Итак, это все о том, как мы можем создавать и удалять первичный ключ в таблице.
Создание первичного ключа с помощью ALTER TABLE
Чтобы определить первичный ключ, мы можем использовать ALTER TABLE.
Первичный ключ успешно добавлен. Теперь давайте лучше узнаем о внешних ключах.
Внешние ключи
Как и первичные ключи, внешние ключи могут быть определены при определении таблицы с помощью команды ALTER TABLE.
Внешний ключ при создании таблицы
В разделе первичного ключа мы создали таблицу для книг. Теперь предположим, что у нас есть еще одна таблица authors в нашей базе данных, которая включает идентификатор автора в качестве первичного ключа, имя и фамилию автора,
И мы хотим создать внешний ключ к идентификатору автора в таблице книг. Итак, чтобы создать внешний ключ для author_id при создании таблицы книг, мы запускаем этот запрос:
Отбросьте внешний ключ
Удаление внешнего ключа – это не то же самое, что удаление первичного ключа. Сначала мы должны получить имя ограничений, выполнив команду «SHOW CREATE TABLE books».
Затем укажите имя ограничения для команды ALTER TABLE следующим образом:
Вот как мы можем создавать и удалять внешний ключ в таблице.
Первичный ключ с помощью команды ALTER TABLE
Для создания внешнего ключа в существующей таблице с помощью команды ALTER TABLE,
Мы видим, что author_id успешно установлен в качестве внешнего ключа.
Резюме
Мы узнали о сути и концепциях первичных и внешних ключей. А также создание, добавление и удаление первичного или внешнего ключа в таблице.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Что такое внешний ключ базы данных? Учебник для новичков
Эта статья написана Бриттни Паркер, писателем из Girls Write Tech, которая специализируется на написании технических материалов. Они стремятся побудить больше женщин-разработчиков делиться своими знаниями.
В мире баз данных существует избыток типов данных и структур, и определение того, какие из них использовать, часто является предметом горячих споров. Понимание различных ключей может помочь вам понять, как лучше всего использовать конкретную систему для ваших уникальных потребностей.
По мере того, как сложность структур данных продолжает развиваться, базы данных перешли на реляционные базы данных и мультимодальные базы данных, которые сегодня используются наиболее часто. Теперь мы можем связать различные таблицы осмысленным образом, используя внешние ключи.
Внешний ключ — это столбец (или группа столбцов), используемый в реляционной базе данных для связи данных между таблицами. Серверы внешних ключей для ссылки на первичный ключ другой существующей таблицы.
Сегодня это руководство познакомит вас с внешними ключами и покажет, как их использовать в SQL.
Что такое внешний ключ в базе данных?
Внешние ключи структурированы в базе данных как общий компонент, связывающий вместе две таблицы. Внешний ключ всегда должен ссылаться на первичный ключ в другом месте.
Исходная таблица называется родительской или ссылочной таблицей, а ссылочная таблица с внешним ключом называется дочерней таблицей.
Ссылки на внешние ключи хранятся в дочерней таблице и связаны с первичным ключом в отдельной таблице.
Столбец, действующий как внешний ключ, должен иметь соответствующее значение в связанной таблице. Это создает ссылочную целостность.
Мы должны быть осторожны при создании таблиц или изменении таблиц (например, при вставке или удалении данных из столбца внешнего ключа), чтобы избежать изменения или разрушения связи между ними.
Скажем, у нас есть две таблицы с именами customerи order. Мы можем использовать внешний ключ для создания связи между ними. В ordersтаблице мы создаем ключ, который ссылается на клиента (т.е. CUSTOMER_ID) в другой таблице.
В CUSTOMER_IDтаблице заказов становится внешним ключом, который ссылается на родительский или первичный ключи в таблице клиентов.
Примечание. Чтобы вставить запись в таблицу заказов, необходимо выполнить ограничение внешнего ключа.
Если мы попытаемся ввести CUSTOMER_IDданные, которых нет в таблице клиентов, мы нарушим целостность ссылочных полномочий таблицы.
Ограничение FK
Точное соединение данных — главная директива. Интеграция программного обеспечения и возможность безопасного обмена данными между приложениями зависят от целостности данных и взаимосвязей с базами данных.
Вот где возникает ограничение. Внешние ключи часто ограничиваются, чтобы гарантировать, что пользователь не может предпринимать действия, которые могут повредить связи зависимостей между таблицами. Это также не позволяет пользователям вводить недопустимые данные.
Мы можем использовать ограничения внешнего ключа, чтобы поддерживать ссылочную целостность наших отношений внешнего ключа. Есть много ссылочных действий, которые мы можем использовать для ограничения, в том числе:
Когда дело доходит до именования ограничений внешнего ключа, мы должны соблюдать следующие общие правила:
Внешний ключ против первичного ключа
В отличие от внешнего ключа, первичный ключ работает в реляционной базе данных для уникальной идентификации определенных записей. Первичные ключи должны быть уникальными для таблицы и часто используются в качестве абсолютной точки отсчета для других типов ключей базы данных.
Внешние ключи используются больше как ссылка, чем как уникальный идентификатор конкретной строки или записи.
В то время как в конкретной таблице или реляционной базе данных можно использовать несколько внешних ключей, для каждой базы данных разрешен только один первичный ключ. Для внешних ключей разрешены повторяющиеся значения, а также нулевые значения.
Нулевые значения не допускаются для первичных ключей, и ссылки на любые первичные ключи в таблице должны быть удалены перед удалением строки / записи первичного ключа.
Внешний ключ против составного ключа
Составные ключи в реляционной базе данных используются для объединения двух или более столбцов в определенной таблице, создавая уникальный идентификатор для этой комбинации столбцов.
Хотя технически ключ-кандидат в качестве составного ключа проверяет уникальность, составные ключи формируются только тогда, когда конкретный столбец или столбцы используются в сочетании друг с другом.
Как и внешние ключи, составные ключи могут использоваться для связывания нескольких таблиц в реляционной базе данных. В отличие от внешних ключей, составные ключи можно определить как первичный ключ при создании некоторых таблиц SQL.
Ссылочные действия внешнего ключа
Ссылочная целостность ограничивается внешними ключами, гарантируя, что значения в конкретной таблице соответствуют значениям, которые находятся в другой таблице.
Эти ссылочные действия усиливают целостность структуры таблицы, снижая вероятность ошибки, гарантируя, что ссылочные столбцы содержат только уникальные наборы значений.
Внешние ключи также могут принимать нулевые значения, но важно отметить, что это может ограничить их способность защищать целостность указанного столбца, поскольку нулевые значения не проверяются.
Совет: передовой опыт указывает на использование NOT NULLограничения при создании внешних ключей для поддержания структурной целостности базы данных.
Создание структуры данных, которая является гибкой и достаточно расширяемой для долгосрочного использования, может становиться все труднее по мере роста сложности и объема данных. Добавление неструктурированных данных может легко привести к ошибкам.
Внешние ключи — чрезвычайно ценный компонент, помогающий обеспечить ясность, согласованность и способность вашей базы данных быстро предоставлять точные результаты.
Внешние ключи в SQL и MySQL
Давайте посмотрим на синтаксис с использованием SQL и MySQL. В следующем примере создается FOREIGN KEY в столбце «PersonID».
Узнайте больше о различных типах баз данных здесь
Следующий синтаксис позволяет нам назвать ограничение FOREIGN KEY:
Реальный пример SQL
А теперь давайте уточним. Ниже Actorsтаблица является таблицей, на которую ссылаются, и называется родительской таблицей. Здесь справочная таблица DigitalAssetsявляется дочерней таблицей.
Мы объявляем столбец как внешний ключ в дочерней таблице, только если для столбца определен индекс. Если столбец не имеет индекса, его нельзя использовать в качестве внешнего ключа.
В нашем примере мы изменяем наш DigitalAssetsи устанавливаем ActorIDстолбец как внешний ключ следующим образом:
Теперь, если мы добавим в DigitalAssetsтаблицу строку с идентификатором актера, которого нет в Actorsтаблице, появится сообщение об ошибке:
Мы также можем создать ограничение внешнего ключа для самой таблицы. Например, это может быть таблица сотрудников со столбцом для идентификации менеджера. Поскольку менеджер также является сотрудником, также будет присутствовать строка, идентифицирующая его.
Идентификатор менеджера будет ссылаться на идентификатор сотрудника в том же столбце, а идентификатор сотрудника будет действовать как внешний ключ.