MySQL 中操作excel表格总结
最近在负责一个项目的落地工作,需要每天导出客户通讯录进行统计各地区注册用户数、使用用户数、未使用用户数、注册不符合规范的用户等等操作,刚开始用户数量比较少,直接在excel中筛选查询就行,但是随着用户数量的增加到几十万,excel筛选已无法满足需求,所有就想着导入到MySQL数据库中进行查询,这样就起到事倍功半的效果.
1.首先用MySQL工具Navicat for MySQL导入excel表,excel表格编码格式为UTF-8格式.
我将excel表格导入MySQL db0库中,也需要设置编码为UTF-8格式;
mysql> show create database db0;
+----------+--------------------------------------------------------------+
| Database | Create Database |
+----------+--------------------------------------------------------------+
| db0 | CREATE DATABASE `db0` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+--------------------------------------------------------------+
row in set (0.00 sec)
2.如果第一步能将excel表成功导入数据库中,那就成功了一般,剩下的就是用sql对数据库的操作了,但是我的通讯录里面有三十一个省份自治区直辖市的用户,如果一条条sql统计的话也会比较的麻烦,所有就考虑自己写脚本来操作数据库了。
由于每次查询都需要登录数据库,所有将数据库用户名密码都保存在文件中,这样就可以直接执行脚本,也不担心执行提示明文密码不安全的警告.将用户数据库密码保存在/etc/my.cnf文件中,定义如下:
# cat /etc/my.cnf [client]
host=localhost
port=
user=root
password=
然后再脚本中加入一下行,使用是$MySQL -e "SQL语句" 即可.
#sed -i 's/x190920/x190927/g' *.sh MySQL="mysql --defaults-extra-file=/etc/my.cnf" #$MySQL -e "use db0;select * from 数据库名称;"
3.接下来就是根据需求来统计用户数据,可以通过shell脚本实现.
脚本示例:
1.>统计各省的人数及总人数,其中memberlist.txt文件保存的是各省的名称,
#!/bin/bash
########################################
#注册总人数
######################################## MySQL="mysql --defaults-extra-file=/etc/my.cnf" #统计各省的人数
function statistics()
{
for i in $(cat memberlist.txt |awk '{print $1}')
do
result=`$MySQL -e "use db0;select count(*) from x190927 where 部门 like '%$i%';"`
echo $result >> tmp.txt echo -e "\033[1;3;32m$i的统计人数为:\033[0m"
echo -e "\033[1;3;33m$result\033[0m" >/dev/null
done
} #统计总人数
function Summation(){
Accumulate=
total=`cat tmp.txt|awk '{print $2}'`
for n in $total
do
let Accumulate+=$n
done
echo -e "\033[1;3;34m注册总人数为:\n $Accumulate \033[0m"
} statistics
Summation
rm -rf /root/script/tmp.txt
2.示例二:统计各省市注册电话为空的用户总数及总数
在这里统计时将各省市的统计结果保存到excel中.
#!/bin/bash
########################################
#统计各省市注册用户电话为空的用户
######################################## MySQL="mysql --defaults-extra-file=/etc/my.cnf"
/usr/bin/rm -rf /var/lib/mysql-files/* function statistics()
{
for i in $(cat memberlist.txt |awk '{print $1}')
do
result=`$MySQL -e "use db0;select 姓名,帐号,手机,部门 from x190927 where length(手机) is null and 部门 like '%$i%' into outfile '/var/lib/mysql-files/$i.xls' character set gbk;"` #每个部门手机号为空的用户
tel_numbe_null=`$MySQL -e "use db0;select count(*) from x190927 where length(手机) is null and 部门 like '%$i%';"`
echo $tel_numbe_null >> tmp.txt
echo -e "\033[1;3;32m$i的统计人数为:\033[0m"
echo -e "\033[1;3;33m$tel_numbe_null\033[0m" 2>/dev/null
done
} function Summation(){
Accumulate=0
total=`cat tmp.txt|awk '{print $2}'`
for n in $total
do
let Accumulate+=$n
done
echo -e "\033[1;3;34m无手机号的注册总人数为:\n $Accumulate \033[0m"
} statistics
Summation
rm -rf /root/script/tmp.txt
这里面要注意几个知识点:
1.>导出的excel文件保存在 /var/lib/mysql-files/ 目录中,mysql安全方面的要求.
2. >sql 的 length函数,用来判断字段列的长度的,count函数用来求和的.
3.>注意设置excel的字符集,不然导出后打开会乱码 ,这里设置的是 character set gbk;
3.由于使用上面导出excel表没有列名,看起来不是很友好,示例三就讲解导出的表格中也带有列名
sql模板:(这样导出后就会有姓名、账号、手机号、部门的列名称,主要熟悉写法和后面的字段含有.)
select * from (
select '姓名' as 姓名,'帐号' as 帐号,'手机号' as 手机号,'部门' as 部门
union all
select 姓名,帐号,手机,部门 from x190927 where length(手机) is null and 部门 like '%北京市%'
) a into outfile '/var/lib/mysql-files/888.xls' character set gbk
fields terminated by '\t'
OPTIONALLY ENCLOSED BY '"'
lines terminated by '\n';
示例脚本:
#!/bin/bash
########################################
#统计各省市注册用户电话为空的用户
######################################## MySQL="mysql --defaults-extra-file=/etc/my.cnf"
/usr/bin/rm -rf /var/lib/mysql-files/* function statistics()
{
for i in $(cat memberlist.txt |awk '{print $1}')
do result=`$MySQL -e "use db0; select * from (select '姓名' as 姓名,'帐号' as 帐号,'手机号' as 手机号,'部门' as 部门 union all select 姓名,帐号,手机,部门 from x190927 where length(手机) is null and 部门 like '%$i%') a into outfile '/var/lib/mysql-files/$i.xls' character set gbk fields terminated by '\t' lines terminated by '\n';"` #每个部门手机号为空的用户
tel_numbe_null=`$MySQL -e "use db0;select count(*) from x190927 where length(手机) is null and 部门 like '%$i%';"`
echo $tel_numbe_null >> tmp.txt
echo -e "\033[1;3;32m$i的统计人数为:\033[0m"
echo -e "\033[1;3;33m$tel_numbe_null\033[0m" 2>/dev/null
done
} function Summation(){
Accumulate=0
total=`cat tmp.txt|awk '{print $2}'`
for n in $total
do
let Accumulate+=$n
done
echo -e "\033[1;3;34m无手机号的注册总人数为:\n $Accumulate \033[0m"
} statistics
Summation
rm -rf /root/script/tmp.txt
将excel文件导出到/var/lib/mysql-files目录中,好像需要在/etc/my.cnf中设置如下参数.
cat /etc/my.cnf
[mysqld]
validate_password=off #关闭密码安全策略
default_password_lifetime= #设置密码不过期
这就是自己在写脚本中掌握和遇到的,记录下以便于以后使用.
我在导入excel刚开始时,数据量在几万条导入数据库没问题,但是excel数据在10多万条时导入显示成功,但数据库里面就几千条数据,查原因查了半天也没解决,最后只能将excel转换成txt格式的导入数据库,导入txt文档是注意编码格式.
MySQL 中操作excel表格总结的更多相关文章
- MySQL中导入Excel表格中的数据
在数据库中建立好响应的数据库.表(参考excel表格中列中的名字和内容): 将excel表格另存为txt文件,选择“文本文件(制表符分割)”: 打开相应的txt文件,只留下要导入的数据(windows ...
- qt 操作excel表格
自己编写的一个Qt C++类,用于操作excel表格,在Qt中操作excel需在.pro中增加CONFIG+=qaxcontainer配置. 1.打开Excel:objExcel = new QAx ...
- 【转】python操作excel表格(xlrd/xlwt)
[转]python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异, ...
- 用NPOI、C#操作Excel表格生成班级成绩单
在C#中利用NPOI操作Excel表格非常方便,几乎上支持所有的Excel表格本身所有的功能,如字体设置.颜色设置.单元格合并.数值计算.页眉页脚等等. 这里准备使用NPOI生成一个班级成绩单Exce ...
- 转载:python操作excel表格(xlrd/xlwt)
python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而 ...
- 使用Java操作Excel表格
目录 一.配置第三方库 二.使用Apache POI API 1. 打开Excel文件 2. 选择对应的sheet 3. Sheet接口的基本使用 3.1 获取开头行和结束行 3.2 获取Row对象 ...
- j2e中操作EXCEL
在j2e中操作excel,无非2种情况,在这里我贴部分代码做个例子就OK,不管是导入和导出都是操作的都是流 1,导入,浏览器输入EXCEL到java后台解析 package action; impor ...
- Python 利用Python操作excel表格之openyxl介绍Part2
利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436) ## 绘图 c = LineChart() ...
- Python 利用Python操作excel表格之openyxl介绍Part1
利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436),免费获取以下性能监控工具(类似Nmon精简版) ...
随机推荐
- 怎么删掉xampp文件夹
删掉xampp文件夹时,提示:操作无法完成,因为其中的文件夹或文件已在另一程序中打开 具体的解决方法: 菜单栏输入:服务 找到apachezt和mysqlzt,并禁用 -- 因为之前打开Zent ...
- 2019.6.11_MySQL进阶三:临时表
临时表 临时表主要应用于保存一些临时数据.临时表只在当前连接可见.当关闭连接时,MySQL会自动删除表并且释放空间.临时表在MySQL 3.23版本中添加,低于 3.23版本就无法使用MySQL的临时 ...
- JavaMap常用操作
判断key值是否存在 map.containsKey("youkey") 根据key修改value值 map.put("youkey","you ne ...
- Python前言之Markdown使用
一.Markdown基本语法 1.1标题 代码: # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 效果: 一级标题 二级标题 三级标题 ...
- web框架--tornado之验证码实例
tornado随机生成图片验证码 用python生成随机验证码需要借鉴一个插件,和一个io模块,实现起来也非常容易,当然也需要借鉴session来判断验证码是否错误,下面写一段用户登录验证带验证码的. ...
- Excel引用和数学函数
1.indirect函数--引用函数 indirect 英 [ˌɪndəˈrekt] 美 [ˌɪndəˈrekt] adj. 间接的;附带的;闪烁其词的;拐弯抹角的;迂回的;弯曲的 indirect函 ...
- springboot启动时控制台不显示映射的URL
背景 今天,第一次使用 2.2.0 版本的springboot,在访问接口时发现访问不到,于是在控制台进行 URL 搜索,发现并相关没有内容 原因 springboot版本差异,切换回 2.0.5.R ...
- 传统的DOM渲染方式
什么是DOM渲染: DOM渲染是浏览器展现给用户的DOM文档的生成的过程. DOM渲染的演化过程: ①纯后端渲染 ②纯前端渲染 ③服务端的js渲染结合前端渲染 纯后端渲染:DOM树的生成完全是在后端服 ...
- Linux性能优化实战学习笔记:第二十一讲
一 内存性能指标 1.系统内存使用情况 共享内存:是通过tmpfs实现的,所以它的大小也就是tmpfs使用的大小了tmpfs其实也是一种特殊的缓存 可用内存:是新进程可以使用的最大内存它包括剩余内存和 ...
- Excel输入十六进制数,以及十六进制运算
网上复制来复制去的连个靠谱答案都没有...f**k 所以无奈自己探索出来了 先放效果图 文本值 转 进制值 单元格: A1文本值 A2进制值 输入内容: 'fefe =OCT2HEX(HEX2OCT( ...