[本文出處:http://blog.csdn.net/u012377333/article/details/47022699](http://blog.csdn.net/u012377333/article/details/47022699)
從上面的幾篇文章中,可以知道如何[使用Shell創建數據庫](http://blog.csdn.net/u012377333/article/details/47001007),[使用Shell創建數據表](http://blog.csdn.net/u012377333/article/details/47006087),本文繼續介紹Shell結合MySQL的使用--如何使用Shell批量插入數據?
這里涉及一點MySQL其他的知識,[如何導入或者導出數據?](http://blog.csdn.net/u012377333/article/details/47022469)
首先做這些之前,需要按照上面所介紹的創建好數據庫和數據庫表,然后就是將要查詢到數據庫中的數據寫到CSV文件中,由于個人比較懶,選擇從一個現成的數據庫中導出一部分數據用于測試。
創建了一個名字叫做[t_prov_city_area_street](http://download.csdn.net/detail/u012377333/8926341)的數據表,關于如何創建這個表可以去我的資源里面下載創建該表的sql腳本,該腳本的名字是[t_prov_city_area_street.sql](http://download.csdn.net/detail/u012377333/8926341)。然后就是使用上面介紹的方法,導出關于所有省的信息,導出方法如下:
~~~
<span style="font-family:Microsoft YaHei;font-size:14px;">SELECT * FROM t_prov_city_area_street WHERE level=3 INTO OUTFILE '/tmp/prov_csv' FIELDS TERMINATED BY ',';</span>
~~~
我們就會得到一個保存著所有省級信息的CSV文件[prov.csv](http://download.csdn.net/detail/u012377333/8926341),同樣可以在資源里面找到這個文件。
接下來就是重點部分了Shell腳本批量插入數據:
~~~
#!/bin/sh
#Author: chisj
#Date: 2015.7.23
#Describe Insert Data TO Table 'sct_Province'
#The username of mysql database
USER="root"
#The password of mysql database
PASS="dragonwake"
#The datebase name will be created
DATABASE="SmartCare"
TABLE="sct_Province"
TABLE_DATA="prov.csv"
if [ -f ${TABLE_DATA} ]; then
echo "File ${TABLE_DATA} Existed."
else
echo "File ${TABLE_DATA} Not Existed."
echo
exit 2
fi
while read line;
do
query=`echo $line | awk -F, '{printf("\"%s\", \"%s\", \"%s\", \"%s\"", $2, $3, $4, $5)}'`
statement=`echo "insert into ${TABLE}(ProvinceCode, ParentID, ProvinceName, Level) values($query)"`
echo $statement
mysql -u $USER -p$PASS $DATABASE << EOF > /dev/null
insert into ${TABLE}(ProvinceCode, ParentID, ProvinceName, Level) values($query);
EOF
done < $TABLE_DATA
if [ $? -eq 0 ]; then
echo "Insert Data Into $TABLE Success."
fi
~~~
執行shell腳本的時候的截圖,可以參考一下:

插入完成之后,查詢結果的截圖:

由于我希望主鍵ProvinceID是自增長的,不想使用csv里面的數據,所有腳本里面有一點點的改變,就是
~~~
query=`echo $line | awk -F, '{printf("\"%s\", \"%s\", \"%s\", \"%s\"", $2, $3, $4, $5)}'`
statement=`echo "insert into ${TABLE}(ProvinceCode, ParentID, ProvinceName, Level) values($query)"`
~~~
和
~~~
query=`echo $line | awk -F, '{printf("\"%s\", \"%s\", \"%s\", \"%s\", \"%s\"", $1, $2, $3, $4, $5)}'`
statement=`echo "insert into ${TABLE} values($query)"`
~~~
以及
~~~
insert into ${TABLE}(ProvinceCode, ParentID, ProvinceName, Level) values($query);</span>
~~~
和
~~~
insert into ${TABLE} values($query);
~~~
替換就可以了。
在驗證數據是否插入成功的時候,會發現有亂碼,我在創建數據的時候有設置為utf8格式,為什么還會這樣的,后來我重啟了mysqld服務就可以正常看到中文了。
### 所有的腳本和CSV文件:[Shell腳本批量添加CSV數據到MySQL](http://download.csdn.net/detail/u012377333/8926341)