簡體   English   中英

在Bash中循環遍歷mysql的結果集

[英]Loop through result set of mysql in Bash

我有一個簡單的bash腳本。 我希望獲得數據庫每個表中行數的准確計數。

#!/bin/bash

TABLES_OLD=$( mysql -u user -ppassword MySchema --batch --skip-column-names -e"SHOW TABLES FROM MySchema" )

for table in "${TABLES_OLD[@]}"
do
    QUERY="SELECT COUNT(*) FROM ${table}"
    echo "${QUERY}"
done

腳本打印:

SELECT COUNT(*) FROM Table 1
Table2
Table3
Table4
etc...

顯然,這不是我想要的,而且我什至不了解發生了什么事情。 我究竟做錯了什么?

Try this, put the tables into an array then loop thru the results
db_host='host'
db_user='user'
db_pass='password'
db='your_db'

read -ra var_id <<< $(mysql -h $db_host -u $db_user -p$db_pass $db -sse "show tables from $db")
for i in "${var_id[@]}"; 
    do
results=$(mysql -h $db_host -u $db_user -p$db_pass $db -sse "select count(*)from $i")
echo "$i $results"

done

這應該做到這一點:

#/bin/bash
mysql -u user-ppassword -e "SELECT table_name, table_rows
                     FROM INFORMATION_SCHEMA.TABLES
                     WHERE TABLE_SCHEMA = 'your_data_base_name';"

eval代替echo

該代碼將是

#!/bin/bash

TABLES_OLD=$( mysql -u user -ppassword MySchema --batch --skip-column-names -e"SHOW TABLES FROM MySchema" )

for table in "${TABLES_OLD[@]}"
do
    QUERY="SELECT COUNT(*) FROM ${table}"
    eval "${QUERY}"
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM