基于CentOS的MySQL学习补充四--使用Shell批量从CSV文件中插入数据到数据表

81 篇文章 0 订阅
5 篇文章 3 订阅

    本文出处: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






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值