MySQL获取数据库每个表的行数
這個問題的起因,是我要進行數(shù)據(jù)庫數(shù)據(jù)的遷移,遷移后確定數(shù)據(jù)是否都遷移成功而遇到的。
對于數(shù)據(jù)庫的遷移,我是使用MySQL官方的數(shù)據(jù)庫管理工具MySQL Workbench完成的。源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫都使用MySQL Workbench連接上去。下面以測試數(shù)據(jù)庫為例講講過程。(如果不想看我廢話,想直接查看怎樣獲取數(shù)據(jù)庫/表記錄數(shù)的同學(xué),請直接翻到“四、獲取數(shù)據(jù)庫每個表的行數(shù)”和“?五、獲取數(shù)據(jù)庫總行數(shù)”吧 ^_^)
一、從源數(shù)據(jù)庫導(dǎo)出數(shù)據(jù)到本地
在MySQL Workbench中,通過“Server”-“Data Export”進入數(shù)據(jù)導(dǎo)出功能頁:?
?
在左邊選擇要導(dǎo)出的數(shù)據(jù)庫(多選),同時可以在右邊選擇該數(shù)據(jù)庫下需要導(dǎo)出的表(多選),其余選項根據(jù)自己需要自行選擇,我只選了“Include Create Schema”,添加用于生成數(shù)據(jù)庫的SQL語句。最后點擊“Start Export”開始導(dǎo)出即可。?
從軟件顯示的log中可以看到,實際是執(zhí)行了mysqldump來進行數(shù)據(jù)導(dǎo)出的:
- 1
二、在目標(biāo)數(shù)據(jù)庫導(dǎo)入數(shù)據(jù)
與導(dǎo)出數(shù)據(jù)類似,在MySQL Workbench中,通過“Server”-“Data Import”進入數(shù)據(jù)導(dǎo)入功能頁:?
?
由于我們導(dǎo)出的時候,選擇了“Self-Contained File”,所以這里也勾選上這項,其他的默認(rèn)即可,點擊“Start Import”進行導(dǎo)入。同樣的,也可以通過log看到MySQL Workbench干了什么:
- 1
三、檢驗數(shù)據(jù)是否遷移成功
這里可以利用MySQL Workbench查看數(shù)據(jù)庫信息,如下圖:?
?
如圖,數(shù)據(jù)指到要查看的數(shù)據(jù)庫上,點擊出現(xiàn)的“I”圖標(biāo),就可以顯示這個數(shù)據(jù)庫的相關(guān)信息,其中最后一項“Database Size(rough estimate)”即是數(shù)據(jù)庫的大小。在我的實際數(shù)據(jù)庫中,源數(shù)據(jù)庫顯示的是1.5G,而目標(biāo)數(shù)據(jù)庫顯示的卻只有847MB。?
此外,還可以切換到“Tables”選項卡,查看各個表的信息:?
?
注意到其中有一項“Rows”,顯示了每個表的行數(shù),這里有不少表在源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫顯示的行數(shù)也是不同的。這兩個地方讓我一度以為遷移失敗了。直到我一不小心執(zhí)行了select count(*) from xxx,竟意外的發(fā)現(xiàn)結(jié)果是相同的,在MySQL Workbench中看到的行數(shù)雖然不同,但是通過SQL查詢出來的結(jié)果是相同的。于是,為了確定是否所有表都相同,就引出了今天的問題:MySQL獲取數(shù)據(jù)庫每個表的行數(shù)。
四、獲取數(shù)據(jù)庫每個表的行數(shù)
方法1.利用INFORMATION_SCHEMA.TABLES 表
對這個沒有深入去了解,只知道這個表是在MySQL中默認(rèn)存在的,包含了各個數(shù)據(jù)庫以及各個表的各種信息,具體可以參考官方文檔。具體的用法就是
select table_name,table_rows from information_schema.tables where TABLE_SCHEMA = 'phalcon_invo' order by table_rows desc- 1
看到結(jié)果的我驚呆了,發(fā)現(xiàn)這不正和“三”中在MySQL Workbench中看到的數(shù)據(jù)一樣嗎?也是不正確的!上網(wǎng)查了一下,看到有說法說,“對于InnoDB表,table_rows行計數(shù)僅是大概估計值。”到了這里,順便也發(fā)現(xiàn)了MySQL Workbench的數(shù)據(jù)庫大小信息以及每個表的行數(shù)其實都是通過 INFORMATION_SCHEMA.TABLES中的“DATA_LENGTH”和“TABLE_ROWS”字段實現(xiàn)的(PS:后來仔細看發(fā)現(xiàn)人家MySQL Workbench顯示數(shù)據(jù)庫大小那里特意用括號標(biāo)注了“rough estimate”,即“粗略估計”,只怪我英語不好,一開始被我直接無視掉了。。。)。既然這個方法行不通,那我們只能老老實實的通過select count(*) from xxx來查看了。
方法2.批量查找各表的行數(shù)
雖然要通過select count(*) from xxx來查看,但我們也不能自己手動把xxx替換成每個表呀,那不得累死了!雖然上面的INFORMATION_SCHEMA.TABLES中的“DATA_LENGTH”和“TABLE_ROWS”并不可靠,但是它的“TABLE_NAME”還是可靠的,所以我們就要利用這個字段,獲取每個表的名字,然后批量構(gòu)造出查詢的SQL語句,就可以大大減輕我們的負(fù)擔(dān)啦!?
a.構(gòu)造SQL語句
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
執(zhí)行后,我們便獲得了構(gòu)造好的SQL語句了,如圖:?
?
一個Ctrl + a ,復(fù)制中間的查詢結(jié)果備用。?
b.執(zhí)行查詢?
粘貼上一步復(fù)制的SQL語句,并去掉最后的一個“union all”:
- 1
- 2
- 3
- 4
- 5
再執(zhí)行語句就可以啦:?
?
大功告成!
五、獲取數(shù)據(jù)庫總行數(shù)
上面的方法已經(jīng)可以獲取某個數(shù)據(jù)庫里每個表的行數(shù)了,但如果你只關(guān)心總行數(shù)的話,還要把它們加起來,這就比較麻煩了。所以再補充一個直接獲取總行數(shù)的方法,和上面的方法很相似,也是分兩步,構(gòu)造SQL和執(zhí)行查詢,只不過構(gòu)造SQL的時候用一個sum語句來包住就可以了。?
a.構(gòu)造SQL語句
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
b.執(zhí)行查詢?
粘貼上一步復(fù)制的SQL語句,并去掉最后的一個“union all”:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
這樣就省事許多啦!
參考文章:?
mysql中查看數(shù)據(jù)庫中所有表的記錄
from: http://blog.csdn.net/call_me_lzm/article/details/52244162
總結(jié)
以上是生活随笔為你收集整理的MySQL获取数据库每个表的行数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的MYSQL学习心得(4) : 数据类
- 下一篇: JVM内存管理–GC算法精解(五分钟让你