2012-04-20 1 views
4

Давайте предположим, что таблица, какКак подсчитать количество строк, ссылающихся на внешний ключ в MySql?

CREATE TABLE `testdb`.`test` (
    `id` bigint unsigned NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

есть и другие таблицы могут иметь внешний ключ со ссылкой на test.id колонку. Интересно, что я не знаю, какая таблица имеет такой внешний ключ и сколько строк имеет таблица.

Теперь я хочу рассчитать количество строк, диспергирующих в таблицах, которые имеют внешний ключ для test.id. Является ли это возможным?

Я думаю, что это теоретически возможно, иначе MySql не может делать операции, как ON DELETE CASCADE, DELETE SET NULL ...

+0

Я не думаю, что это возможно. В других таблицах есть ссылки на эту таблицу, но не на эту таблицу для других рецензентов. –

+0

Я думаю, что не зная, какая сумма является частью всей идеи. –

+1

Вы хотите динамически определить ограничения внешнего ключа из других таблиц? Вы хотите сделать все свои проверки в MySQL? Вы боитесь использовать регулярные выражения? –

ответ

5

Отображает все связанные таблицы с строки отсчитывает

SELECT rc.table_name, t.TABLE_ROWS 
FROM `REFERENTIAL_CONSTRAINTS` rc 
INNER JOIN `TABLES` t ON t.TABLE_NAME = rc.TABLE_NAME 
WHERE rc.REFERENCED_TABLE_NAME = "test" 

Показывает сумму всех ссылочные таблицы количество строк

SELECT SUM(t.TABLE_ROWS) AS allReferencedTablesRowCount 
FROM `REFERENTIAL_CONSTRAINTS` rc 
INNER JOIN `TABLES` t ON t.TABLE_NAME = rc.TABLE_NAME 
WHERE rc.REFERENCED_TABLE_NAME = "test" 
+0

Я использую mysql, что выше применимо только к SQLServer? –

+0

нет, он применяется для mysql, но выше mysql 5.1 (таблица MySQL REFERENTIAL_CONSTRAINTS была добавлена ​​в MySQL 5.1.10. В MySQL 5.1.16 был добавлен столбец REFERENCED_TABLE_NAME.) –

+0

спасибо, я вижу. мой 5.0.77, позвольте мне попробовать более новый. –

0

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

редактировать: check this (на левой стороне выберите «метаданные базы данных» -> «Найти дочерние таблицы»)

+0

Как упоминалось в @JohnFx, это дубликат http://stackoverflow.com/questions/806989/mysql-how-to-i-find-all-tables-that-have-foreign-keys-that-reference-particular –

Смежные вопросы