分类目录归档:数据库

SQL数据分析杂货铺

查询整个数据库含某个列的语句:
SELECT *
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
COLUMN_NAME = ‘level’

查询数据库所有表的注释:
SELECT TABLE_NAME,TABLE_COMMENT FROM information_schema.TABLES WHERE table_schema=’mammothcode’;

查询所有表下的所有字段的注释:
SELECT t.TABLE_NAME,t.TABLE_COMMENT,c.COLUMN_NAME,c.COLUMN_COMMENT FROM information_schema.TABLES t,INFORMATION_SCHEMA.Columns c WHERE c.TABLE_NAME=t.TABLE_NAME AND t.TABLE_SCHEMA=’newsql’

查询表某列字段的总和:
SELECT SUM(amount) FROM xl_withdraw_record

按时间分组查询:

select month(FROM_UNIXTIME(time)) from table_name group by month(FROM_UNIXTIME(time))

1、按月分组:
select month(FROM_UNIXTIME(time)) from table_name group by month(FROM_UNIXTIME(time))
2、按年月分组:
select DATE_FORMAT(FROM_UNIXTIME(time),”%Y-%m”) from tcm_fund_list group by DATE_FORMAT(FROM_UNIXTIME(time),”%Y-%m”)
或者:
select FROM_UNIXTIME(time,”%Y-%m”) from tcm_fund_list group by FROM_UNIXTIME(time,”%Y-%m”)
3、按年月日分组:
select DATE_FORMAT(FROM_UNIXTIME(time),”%Y-%m-%d”) from tcm_fund_list group by DATE_FORMAT(FROM_UNIXTIME(time),”%Y-%m-%d”)
或者:
select FROM_UNIXTIME(time,”%Y-%m-%d”) from tcm_fund_list group by FROM_UNIXTIME(time,”%Y-%m-%d”)
其中FROM_UNIXTIME(time,”%Y-%m-%d”)中的time代表UNIX时间戳的字段名称

数据分析SQL查询入门笔记

现在SQL已经作为数据分析这门学科的必备技能,所以学习SQL也提上了议程,下面就是我作为笔记简单的记录了一些数据分析这门学习需要的一些基本SQL语句。

语法格式

在SQL语句中,是不区分大小写的,比如下面的三段代码都是能够得到相同用的结果。

SELECT id,total

select id,total

SelEcT id,total

虽然上面的代码是可以正常运行,但是很容易引起歧义,所以一般命令大写,其他代码片段小写,比如下面这样

SELECT id,total

一般在一条语句后面我们可以添加上分号;以表示这一条语句结束,这样的好处是在多条查询的时候可以减少错误,如果是在单条语句查询的时候可以不用写分号

SELECT和FROM语句

SELECT是SQL查询中最基本的语句,基本上很多语句都从它开始,SELECT在SQL中一般用于选择哪些数据并拿出来展示,比如下面选择了idtotal两个列。

SELECT id,total

FROM语句和SELECT结合,用于用哪个表中选择数据,比如下面的语句就从blog表查询并只选择了idtotal两列数据。

SELECT id,total FROM blog

继续阅读

MariaDB swap空间没有配置导致的出错问题

之前自己写的一篇关于搭建lamp的文章,在运行过程中会出现一些莫名其妙的错误导致mariadb错误,然后必须手动重启mariadb才能正常启动服务。

于是在mariadb的日志文件中查看到错误信息,/var/log/mariadb/mariadb

171002 10:56:34 [ERROR] Plugin 'InnoDB' init function returned error.
171002 10:56:34 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
171002 10:56:34 [ERROR] mysqld: Out of memory (Needed 128917504 bytes)
171002 10:56:34 [Note] Plugin 'FEEDBACK' is disabled.
171002 10:56:34 [ERROR] Unknown/unsupported storage engine: InnoDB
171002 10:56:34 [ERROR] Aborting

其中有一句Out of memory (Needed 128917504 bytes),看来是内存不足导致的错误,因为我的服务器是阿里云的低配服务器,所以当其他服务占用了很多内存之后,导致mariadb没有足够的内存提供服务。

因为自己的内存是512M,于是想到采用swap空间。查看swap的大小是free -m返回的信息是:

              total        used        free      shared  buff/cache   available
Mem:            992         315         331           0         344         525
Swap:             0           0           0

看来swap也没有建立,那么就手动建立一个swap文件,由于官方给的swap大小建议的是实际内存的2倍,所以我在这里就建立了一个1GB的swap交换文件。

dd if=/dev/zero of=/swapfile bs=1024 count=1048576

配置swap

mkswap /swapfile

启动swap

swapon /swapfile

最后你可以通过free -m命令来查看是否成功建立swap交换分区。

文完

Mongodb 身份验证

介绍

不管数据库是在多安全的环境或者本地环境,给数据库建立一个安全的环境是很有必要的。

Mongodb提供了一系列的安全功能,这里介绍一种很常用的身份验证方式。

开启验证

默认情况下,只要在启动数据库的时候没有加上--auth选项,就是没有身份验证功能的,所有客户端都可以进行所有权限的操作。

如果加上过后,我们就可以通过安全的身份验证连接数据库。如果要在数据库中进行身份验证,可以通过db.auth(username, password),如果验证成功则返回1,反之。

建立用户

建立用户我们可以通过db.createUser()方法来建立用户,比如下面这样:

db.createUser({user: 'username', pwd: 'password', roles: [
    {role: 'read', db: 'test'}
]});

继续阅读

Mongodb 备份及恢复

介绍

无论在什么情况下都应该进行数据备份,才能避免灾难性的数据损坏,下面将介绍两种备份方式,两种备份方式使用的场景也不一样,可以根据自身的使用情况进行选择

复制文件备份

在复制数据库文件之前,我们可以通过db.fsynclock()方法让数据库禁止一切写入,并把所有在缓存中的信息全部同步到磁盘中,让所有的写操作进入队列,在没有取消锁之前,Mongodb不会对任何写操作进行处理。

> db.fsyncLock();   首先给数据库上锁,以免出现我们在备份的过程中同时还有数据写入

$ cp -R /data/blog/* /data/Backup/blog  //复制数据库所有的文件到备份目录

> db.fsyncUnlock();  解锁数据库,解锁后数据库将处理队列中的写操作

mongodump

mongodump可以给正在运行的实例进行热备份,只需要通过指定端口,地址,如果在本机上面运行,只需要指定端口就可以进行热备份了。

$ mongodump --port 27017

继续阅读