2012-04-20 73 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 CASCADEDELETE SET NULL ...

+0

我不認爲這是可能的。其他表格引用該表格,但不包括其他表格。 – 2012-04-20 20:42:30

+0

我認爲不知道這個數量是整個想法的一部分。 – 2012-04-20 20:44:53

+1

你想動態找出其他表中的外鍵約束嗎?你想在MySQL中做所有的檢查嗎?你害怕使用正則表達式嗎? – 2012-04-20 20:46:03

回答

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嗎? – 2012-04-20 21:17:20

+0

沒有它適用於mysql,但在mysql 5.1之上(REFERENTIAL_CONSTRAINTS表被添加到MySQL 5.1.10中,REFERENCED_TABLE_NAME列被添加到MySQL 5.1.16中。) – 2012-04-20 21:25:07

+0

謝謝我看到了。我的5.0.77,讓我嘗試一個新的。 – 2012-04-20 21:33:11

0

如果你定義了外鍵約束,你可以從數據庫中讀取架構,看看哪列在錶鏈接到您的主鍵。

編輯:check this(在左側選擇 「數據庫的元數據」 - > 「查找子表」)

+0

正如@JohnFx提到的,這是一個http://stackoverflow.com/questions/806989/mysql-how-to-i-find-all-tables-that-have-foreign-keys-that-reference-particular的副本 – 2012-04-20 20:55:15