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