shell開發基礎:准備100萬條測試數據在MYSQL中


 
介紹
 
最近覺得使用shell語言,做一些業務需求,是超爽的事情。——shell魅力等着我們來發現啊。
 研究案例:插入100萬條記錄以便測試使用,主要是想看看索引的威力。
 
必要性
 
原來一有什么服務端腳本運行,我先想到的是我擅長點的php,然后在考慮shell,因為shell用起來怪怪的。但是今天我下狠心要用shell把代碼寫完。 完工之后回頭看看,恩,確實很爽,相當爽。
 
我覺得我學習shell是非常有必要的啊。
  1、可以用shell方便解決很多問題。如,文件定時切割,多個命令一同執行。
  2、在寫shell的時候,對linux命令會更加熟悉。對linux系統的了解會更深入。——反正對你學習linux是有幫助的。
  3、簡化很多操作,你用C或者php開發的程序,用shell幾句話就能解決了。
 
以上純屬個人觀點,如有異議,歡迎拍磚。 
 
創建表
 
 

                               

可以單獨寫個SQL文件,然后用"mysql -uroot -proot -Dyouku < test.sql"解決。

                               

                                 修改下

                                  還得再執行一遍
 
 這樣表格就創建好了。這種方式是很多人用的,但是在命令行每次都打這么多命令,太麻煩了,所以,我想是不是把它放到shell文件里是不是更方便一些。
 
                                  放入獨立文件中

有的人喜歡把mysql命令放到非PATH文件中,所以我建議把mysql以變量的形式執行。

                                  使用變量

 
控制輸入
 
我想做的更完美一些,能不能我們手動輸入用戶名,密碼和數據庫呢?

這個密碼輸入,我輸入的時候如果旁邊有人看,密碼豈不丟失了,改成隱藏的方式吧

                                   隱藏我的密碼輸入

                                    如果我不知道數據庫都有哪些怎么辦,還是把所有數據庫顯示出來比較好

                                  讓代碼更有層次感,首先想到的當然是函數。——函數歸類。

 
准備100萬條數據
 

                                   為了玩的更盡興,我把創建表和插入表方法分離,通過命令行進行控制。這也是最終代碼。
#/bin/bash
MYSQL="/usr/bin/mysql"

input(){
    #輸用戶名
    echo "##### Please enter your username [enter=root] #####"
    read USERNAME
    if [ "$USENAME" = "" ]; then
        USERNAME="root"
    fi

    #輸密碼
    echo "##### Please enter your password [enter=root] #####"
    stty -echo
    read PASSWORD
    if [ "$PASSWORD" = "" ]; then
        PASSWORD="root"
    fi
    stty echo

    #選擇數據庫
    echo "##### Please select your database [enter=youku] #####"
    DBS="`$MYSQL -u$USERNAME -p$PASSWORD -hlocalhost --batch --skip-column-names -e 'show databases' | sed 's/ /%/g'`"
    select DB in $DBS;
    do
        break
    done

    #execute
}
execute(){
    input
    $MYSQL -u$USERNAME -p$PASSWORD -D$DB < test.sql
}

insert(){
    input

    INSERT_SQL="INSERT INTO t_user(username,password) VALUES"
    for i in $(seq 1 1000000)
    do
        INSERT_SQL="${INSERT_SQL}""('Chuan Shanjia$i',md5('Chuan shanjia$i')),"
    done
        echo ${INSERT_SQL:0:-1}
        $MYSQL -hlocalhost -u$USERNAME -p$PASSWORD -D$DB -e "${INSERT_SQL:0:-1}"
}

case "$1" in
    'insert')
        clear
        insert
        ;;
    'create')
        clear
        execute
        ;;
    *)
        echo "Usage:DbTool:insert or create!"
        ;;
esac
exit 0

                                   運行方式

 

總結
 
大家看到這篇文章,也許會說“什么玩意?這東西都能拿出來現眼。”——呵呵,大家就權當復習基礎知識吧!
 
如果你想學習一下,shell編程基礎,建議看這篇文章 Shell編程基礎
 
 
 
推薦
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM