使用Shell批量从CSV文件中插入数据到数据表

本文出处:

从上面的几篇文章中,可以知道如何使用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#DescribeInsert Data TO Table 'sct_Province'#The username of mysql databaseUSER="root"#The password of mysql databasePASS="dragonwake"#The datebase name will be createdDATABASE="SmartCare"TABLE="sct_Province"TABLE_DATA="prov.csv"if [ -f ${TABLE_DATA} ]; thenecho "File ${TABLE_DATA} Existed."elseecho "File ${TABLE_DATA} Not Existed."echo exit 2fiwhile read line;doquery=`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 $statementmysql -u $USER -p$PASS $DATABASE << EOF > /dev/nullinsert into ${TABLE}(ProvinceCode, ParentID, ProvinceName, Level) values($query);EOFdone < $TABLE_DATAif [ $? -eq 0 ]; thenecho "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

版权声明:本文为博主原创文章,未经博主允许不得转载。

可以以心感悟,以此沉淀,足矣;耳听佳音,目极美好,

使用Shell批量从CSV文件中插入数据到数据表

相关文章:

你感兴趣的文章:

标签云: