Поиск идентификатора ссылки удаленной таблицы во всех таблицах, строках и столбцах БД

#mysql #database #reference #foreign-keys

#mysql #База данных #ссылка #внешние ключи

Вопрос:

Я создал таблицу в своей БД, а затем удалил всю таблицу. но теперь я получил ошибку ограничения внешнего ключа для этого идентификатора таблицы. И из-за этого я не могу обновить что-либо другое для своего приложения в local.

В моей базе данных более 400 таблиц с тысячами записей.

Как я могу найти идентификатор ссылки на удаленную таблицу во всех моих текущих таблицах?

Комментарии:

1. Это было бы невозможно, если бы вы не установили foreign_key_checks = false .. Если вы удалили все строки из таблицы (в отличие от удаления таблицы) Я предлагаю вам восстановить эту таблицу из резервной копии и действовать осторожно.

2. Да, я установил foreign_key_checks = false перед удалением этой таблицы и снова установил его в true после удаления. тогда также возникает эта проблема.

3. Вот почему возникла проблема — как я уже сказал, попробуйте восстановить из резервной копии.

4. Я восстановил удаленные таблицы из резервной копии базы данных и восстановил их. Спасибо за ваше предложение. 🙂

Ответ №1:

Вы можете попытаться найти все таблицы, на которые ссылаются для удаленной таблицы, в системной базе данных information_schema :

 SELECT 
  kcu.TABLE_NAME, kcu.CONSTRAINT_NAME, kcu.COLUMN_NAME, 
  kcu.REFERENCED_TABLE_NAME, kcu.REFERENCED_COLUMN_NAME
FROM information_schema.KEY_COLUMN_USAGE kcu
WHERE kcu.REFERENCED_TABLE_SCHEMA = 'YourDatabaseName' AND 
      kcu.REFERENCED_TABLE_NAME = 'YourDeletedTableName'
 

Комментарии:

1. пользователь14717238, спасибо за ответ и руководство. Но должен ли я каждый раз запускать этот запрос для всех 400 таблиц, заменяя имена таблиц и имена столбцов? это выглядит очень длительным и трудоемким процессом…

2. пользователь14717238, большое вам спасибо за это. Вы сэкономили мое время, и это сработало как шарм. Я получил ограничение ссылки. Еще раз спасибо за это быстрое решение. 🙂

3. @@user14717238 Есть ли способ получить весь идентификатор этой удаленной таблицы из всех таблиц, на которые ссылаются?

4. Вы можете создать SQL-запрос для каждой таблицы, на которую ссылается ссылка, чтобы получить значения столбца, на который ссылается ссылка. Добавьте это выражение к запросу в SELECT предложении и посмотрите результат — CONCAT('SELECT ', kcu.COLUMN_NAME, ' FROM ', kcu.TABLE_NAME, ';') AS sql_select

5. И посмотрите, как выполнять подготовленные запросы из динамически создаваемых строковых переменных, если количество таких запросов действительно велико. — dev.mysql.com/doc/refman/8.0/en/sql-prepared-statements.html

Ответ №2:

Вы можете выполнить поиск по всей схеме (DB) из mysql workbench для имени столбца, на который ссылается ссылка, оттуда вы сможете найти все ссылки

Комментарии:

1. Не могли бы вы предоставить какую-либо ссылку? поскольку я использовал Google и не нашел то, что я хочу.