2012-04-20 3 views
4

다른 테이블 열을 test.id을 참조 외래 키가있을 수 있습니다 테이블 MySql에서 외래 키를 참조하는 행의 수를 계산하는 방법은 무엇입니까?

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

처럼의가 있다고 가정 해 봅시다. 흥미로운 점은 어떤 테이블에 외래 키가 있는지, 그리고 테이블에 몇 개의 행이 있는지 모릅니다.

이제 test.id에 외래 키가있는 테이블에서 분산되는 행의 양을 계산하고 싶습니다. 가능한가?

난 당신이 외국 키 제약 조건이 정의 된 경우

+0

나는 생각하지 않는다. 다른 테이블에는 해당 테이블에 대한 참조가 있지만 다른 테이블에는 해당 테이블이 없습니다. –

+0

나는 그 양을 알지 못한다고 생각한다. –

+1

다른 테이블의 외래 키 제약 조건을 동적으로 파악 하시겠습니까? MySQL에서 모든 점검을 수행 하시겠습니까? 당신은 regexes를 사용하는 것을 두려워합니까? –

답변

5

표시 모든 참조 테이블을 참조 된 테이블 행 수

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 이상 (REFERENTIAL_CONSTRAINTS 테이블은 MySQL 5.1.10에 추가되었습니다 .REFERENCED_TABLE_NAME 열은 MySQL 5.1.16에 추가되었습니다.) –

+0

감사합니다. 내 것이 5.0.77인데, 새로운 것을 시도하겠습니다. –

0

당신이 열을 참조하는 데이터베이스 스키마에서 읽을 수 있습니다 ... 그렇지 않으면 MySQL은 ON DELETE CASCADE, DELETE SET NULL 등의 작업을 할 수 없다, 그것은 이론적으로 가능하다고 생각하는 테이블 기본 키에 연결되어 있습니다.

편집 : check this (왼쪽에있는 '데이터베이스 메타 데이터 "를 선택 ->"자식 테이블 찾기 ") 행이 모두

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" 

표시 합을 계산하여

+0

@ JohnFx 언급했듯이, 이것은 http://stackoverflow.com/questions/806989/mysql-how-to-i-find-all-tables-that-have-foreign-keys-theat-reference- 특정의 사본입니다 –

관련 문제