zoukankan      html  css  js  c++  java
  • 基于CentOS的MySQL学习补充四--使用Shell批量从CSV文件里插入数据到数据表

        本文出处:http://blog.csdn.net/u012377333/article/details/47022699

        从上面的几篇文章中,能够知道怎样使用Shell创建数据库使用Shell创建数据表,本文继续介绍Shell结合MySQL的使用--怎样使用Shell批量插入数据?

       这里涉及一点MySQL其它的知识。怎样导入或者导出数据?

        首先做这些之前,须要依照上面所介绍的创建好数据库和数据库表,然后就是将要查询到数据库中的数据写到CSV文件里。因为个人比較懒。选择从一个现成的数据库中导出一部分数据用于測试。

        创建了一个名字叫做t_prov_city_area_street的数据表,关于怎样创建这个表能够去我的资源里面下载创建该表的sql脚本,该脚本的名字是t_prov_city_area_street.sql。然后就是使用上面介绍的方法,导出关于全部省的信息。导出方法例如以下:

    <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,相同能够在资源里面找到这个文件。

        接下来就是重点部分了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






  • 相关阅读:
    Linux中gdb 查看core堆栈信息
    爱因斯坦名言
    Symbian OS 源码下载方式
    Windows 2003+VS2005+SP1 “无法使用此产品的安装源,请确认安装源存在,并且您可以访问它”的错误
    Visual Studio 2012 Ultimate RTM 序列号
    STL容器erase的使用陷阱
    C++ 迭代器失效
    C++ 类的静态成员详细讲解[静态成员变量链接错误]
    Ubuntu 启动黑屏解决
    android中KSOAP2中的anytype{}问题
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7293834.html
Copyright © 2011-2022 走看看