最近在负责一个项目的落地工作,需要每天导出客户通讯录进行统计各地区注册用户数、使用用户数、未使用用户数、注册不符合规范的用户等等操作,刚开始用户数量比较少,直接在excel中筛选查询就行,但是随着用户数量的增加到几十万,excel筛选已无法满足需求,所有就想着导入到MySQL数据库中进行查询,这样就起到事倍功半的效果.

1.首先用MySQL工具Navicat for MySQL导入excel表,excel表格编码格式为UTF-8格式.

我将excel表格导入MySQL db0库中,也需要设置编码为UTF-8格式;

  1. mysql> show create database db0;
  2. +----------+--------------------------------------------------------------+
  3. | Database | Create Database |
  4. +----------+--------------------------------------------------------------+
  5. | db0 | CREATE DATABASE `db0` /*!40100 DEFAULT CHARACTER SET utf8 */ |
  6. +----------+--------------------------------------------------------------+
  7. row in set (0.00 sec)

2.如果第一步能将excel表成功导入数据库中,那就成功了一般,剩下的就是用sql对数据库的操作了,但是我的通讯录里面有三十一个省份自治区直辖市的用户,如果一条条sql统计的话也会比较的麻烦,所有就考虑自己写脚本来操作数据库了。

由于每次查询都需要登录数据库,所有将数据库用户名密码都保存在文件中,这样就可以直接执行脚本,也不担心执行提示明文密码不安全的警告.将用户数据库密码保存在/etc/my.cnf文件中,定义如下:

  1. # cat /etc/my.cnf
  2.  
  3. [client]
  4. host=localhost
  5. port=
  6. user=root
  7. password=

然后再脚本中加入一下行,使用是$MySQL  -e "SQL语句" 即可.

  1. #sed -i 's/x190920/x190927/g' *.sh
  2.  
  3. MySQL="mysql --defaults-extra-file=/etc/my.cnf"
  4.  
  5. #$MySQL -e "use db0;select * from 数据库名称;"

3.接下来就是根据需求来统计用户数据,可以通过shell脚本实现.

脚本示例:

1.>统计各省的人数及总人数,其中memberlist.txt文件保存的是各省的名称,

  1. #!/bin/bash
  2. ########################################
  3. #注册总人数
  4. ########################################
  5.  
  6. MySQL="mysql --defaults-extra-file=/etc/my.cnf"
  7.  
  8. #统计各省的人数
  9. function statistics()
  10. {
  11. for i in $(cat memberlist.txt |awk '{print $1}')
  12. do
  13. result=`$MySQL -e "use db0;select count(*) from x190927 where 部门 like '%$i%';"`
  14. echo $result >> tmp.txt
  15.  
  16. echo -e "\033[1;3;32m$i的统计人数为:\033[0m"
  17. echo -e "\033[1;3;33m$result\033[0m" >/dev/null
  18. done
  19. }
  20.  
  21. #统计总人数
  22. function Summation(){
  23. Accumulate=
  24. total=`cat tmp.txt|awk '{print $2}'`
  25. for n in $total
  26. do
  27. let Accumulate+=$n
  28. done
  29. echo -e "\033[1;3;34m注册总人数为:\n $Accumulate \033[0m"
  30. }
  31.  
  32. statistics
  33. Summation
  34. rm -rf /root/script/tmp.txt

2.示例二:统计各省市注册电话为空的用户总数及总数

在这里统计时将各省市的统计结果保存到excel中.

  1. #!/bin/bash
  2. ########################################
  3. #统计各省市注册用户电话为空的用户
  4. ########################################
  5.  
  6. MySQL="mysql --defaults-extra-file=/etc/my.cnf"
  7. /usr/bin/rm -rf /var/lib/mysql-files/*
  8.  
  9. function statistics()
  10. {
  11. for i in $(cat memberlist.txt |awk '{print $1}')
  12. do
  13. 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;"`
  14.  
  15. #每个部门手机号为空的用户
  16. tel_numbe_null=`$MySQL -e "use db0;select count(*) from x190927 where length(手机) is null and 部门 like '%$i%';"`
  17. echo $tel_numbe_null >> tmp.txt
  18. echo -e "\033[1;3;32m$i的统计人数为:\033[0m"
  19. echo -e "\033[1;3;33m$tel_numbe_null\033[0m" 2>/dev/null
  20. done
  21. }
  22.  
  23. function Summation(){
  24. Accumulate=0
  25. total=`cat tmp.txt|awk '{print $2}'`
  26. for n in $total
  27. do
  28. let Accumulate+=$n
  29. done
  30. echo -e "\033[1;3;34m无手机号的注册总人数为:\n $Accumulate \033[0m"
  31. }
  32.  
  33. statistics
  34. Summation
  35. 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模板:(这样导出后就会有姓名、账号、手机号、部门的列名称,主要熟悉写法和后面的字段含有.)

  1. select * from (
  2. select '姓名' as 姓名,'帐号' as 帐号,'手机号' as 手机号,'部门' as 部门
  3. union all
  4. select 姓名,帐号,手机,部门 from x190927 where length(手机) is null and 部门 like '%北京市%'
  5. ) a into outfile '/var/lib/mysql-files/888.xls' character set gbk
  6. fields terminated by '\t'
  7. OPTIONALLY ENCLOSED BY '"'
  8. lines terminated by '\n';

示例脚本:

  1. #!/bin/bash
  2. ########################################
  3. #统计各省市注册用户电话为空的用户
  4. ########################################
  5.  
  6. MySQL="mysql --defaults-extra-file=/etc/my.cnf"
  7. /usr/bin/rm -rf /var/lib/mysql-files/*
  8.  
  9. function statistics()
  10. {
  11. for i in $(cat memberlist.txt |awk '{print $1}')
  12. do
  13.  
  14. 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';"`
  15.  
  16. #每个部门手机号为空的用户
  17. tel_numbe_null=`$MySQL -e "use db0;select count(*) from x190927 where length(手机) is null and 部门 like '%$i%';"`
  18. echo $tel_numbe_null >> tmp.txt
  19. echo -e "\033[1;3;32m$i的统计人数为:\033[0m"
  20. echo -e "\033[1;3;33m$tel_numbe_null\033[0m" 2>/dev/null
  21. done
  22. }
  23.  
  24. function Summation(){
  25. Accumulate=0
  26. total=`cat tmp.txt|awk '{print $2}'`
  27. for n in $total
  28. do
  29. let Accumulate+=$n
  30. done
  31. echo -e "\033[1;3;34m无手机号的注册总人数为:\n $Accumulate \033[0m"
  32. }
  33.  
  34. statistics
  35. Summation
  36. rm -rf /root/script/tmp.txt

将excel文件导出到/var/lib/mysql-files目录中,好像需要在/etc/my.cnf中设置如下参数.

  1. cat /etc/my.cnf
  2. [mysqld]
  3. validate_password=off #关闭密码安全策略
  4. default_password_lifetime= #设置密码不过期

这就是自己在写脚本中掌握和遇到的,记录下以便于以后使用.

我在导入excel刚开始时,数据量在几万条导入数据库没问题,但是excel数据在10多万条时导入显示成功,但数据库里面就几千条数据,查原因查了半天也没解决,最后只能将excel转换成txt格式的导入数据库,导入txt文档是注意编码格式.

MySQL 中操作excel表格总结的更多相关文章

  1. MySQL中导入Excel表格中的数据

    在数据库中建立好响应的数据库.表(参考excel表格中列中的名字和内容): 将excel表格另存为txt文件,选择“文本文件(制表符分割)”: 打开相应的txt文件,只留下要导入的数据(windows ...

  2. qt 操作excel表格

     自己编写的一个Qt C++类,用于操作excel表格,在Qt中操作excel需在.pro中增加CONFIG+=qaxcontainer配置. 1.打开Excel:objExcel = new QAx ...

  3. 【转】python操作excel表格(xlrd/xlwt)

    [转]python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异, ...

  4. 用NPOI、C#操作Excel表格生成班级成绩单

    在C#中利用NPOI操作Excel表格非常方便,几乎上支持所有的Excel表格本身所有的功能,如字体设置.颜色设置.单元格合并.数值计算.页眉页脚等等. 这里准备使用NPOI生成一个班级成绩单Exce ...

  5. 转载:python操作excel表格(xlrd/xlwt)

    python操作excel表格(xlrd/xlwt)   最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而 ...

  6. 使用Java操作Excel表格

    目录 一.配置第三方库 二.使用Apache POI API 1. 打开Excel文件 2. 选择对应的sheet 3. Sheet接口的基本使用 3.1 获取开头行和结束行 3.2 获取Row对象 ...

  7. j2e中操作EXCEL

    在j2e中操作excel,无非2种情况,在这里我贴部分代码做个例子就OK,不管是导入和导出都是操作的都是流 1,导入,浏览器输入EXCEL到java后台解析 package action; impor ...

  8. Python 利用Python操作excel表格之openyxl介绍Part2

    利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436) ## 绘图 c = LineChart()    ...

  9. Python 利用Python操作excel表格之openyxl介绍Part1

    利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436),免费获取以下性能监控工具(类似Nmon精简版) ...

随机推荐

  1. GitHub操作(五)

    GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub. 1. 打开浏览器,输入GitHub的网址https://github.co ...

  2. vue系列---Vue组件化的实现原理(八)

    _ 阅读目录 一. 什么是Vue组件? 如何注册组件? 1.1 全局注册组件 1.2 局部注册组件 二:组件之间数据如何传递的呢? 1) props 2) $emit 3) 使用$ref实现通信 4) ...

  3. Apex 小知识:SOQL 在循环中的应用

    两种在循环中引用 SOQL 的方法 第一种方法: List<Account> accounts = [SELECT Id FROM Account WHERE NumberOfEmploy ...

  4. [Taro] Taro 环境安装 (一)

    Taro  环境安装 Taro是一个前端小程序框架,通过这个框架写一套代码,再通过 Taro 的编译工具,就可以将源代码分别编译出可以在不同端(微信/百度/支付宝/字节跳动小程序.H5.React-N ...

  5. 【2019.7.25 NOIP模拟赛 T1】变换(change)(思维+大分类讨论)

    几个性质 我们通过推式子可以发现: \[B⇒AC⇒AAB⇒AAAC⇒C\] \[C⇒AB⇒AAC⇒AAAB⇒B\] 也就是说: 性质一: \(B,C\)可以相互转换. 则我们再次推式子可以发现: \[ ...

  6. [LeetCode] 883. Projection Area of 3D Shapes 三维物体的投影面积

    On a N * N grid, we place some 1 * 1 * 1 cubes that are axis-aligned with the x, y, and z axes. Each ...

  7. [LeetCode] 343. Integer Break 整数拆分

    Given a positive integer n, break it into the sum of at least two positive integers and maximize the ...

  8. [LeetCode] 31. Next Permutation 下一个排列

    Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...

  9. 一次失败的尝试:arm(aarch64架构)上使用docker运行Gogs

    环境 Ubuntu aarch64(好像是arm8的一种) Docker安装指南:https://docs.docker.com/install/linux/docker-ce/ubuntu/ Gog ...

  10. 动图+源码,演示 Java 中常用数据结构执行过程及原理

    ​阅读本文大概需要 3.7 分钟. 作者:大道方圆 cnblogs.com/xdecode/p/9321848.html 最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想 ...