MySQL 查询及删除重复记录

MySQL 查询及删除重复记录

查找多余的重复记录,重复根据字段来判断

SELECT * FROM <table_name> WHERE <col> IN (SELECT <col> FROM <table_name> GROUP BY <col> HAVING COUNT(<col>) > 1)

删除表中多余的重复记录,重复根据字段来判断,保留 rowid 较小的记录

DELETE FROM <table_name> WHERE <col> IN (SELECT <col> FROM <table_name> GROUP BY <col> HAVING COUNT(<col>) > 1 ) AND <rowID> NOT IN (SELECT MIN(<rowid>) FROM <table_name> GROUP BY <col> HAVING COUNT(<col>) > 1)

给有重复记录的表添加唯一索引

alter ignore table <table_name>  add unique index(user_id,user_name);

这样也会删除多余的重复记录

阅读全文 →

数据库的回表和覆盖索引

数据库的回表和覆盖索引

回表

SELECT c1, c2, c3 FROM test_table WHERE c1 =1

如果这里 c1 建立了索引,就会直接根据索引查到 c1 的 rowid(rowid 是一个物理id,每条数据一个,全局唯一),然后根据 rowid 再查询表中的数据,这个过程就是回表。

阅读全文 →

数据库 filesort 排序方式

数据库 filesort 排序方式

当 MySQL 不能使用索引排序的时候,就会利用自己的排序算法(快速排序算法)在内存(sort buffer)中。如果内存装不下,它会将磁盘上的数据进行分块,再对各个数据块进行排序,然后将各个块合并成有序的结果集(实际上就是外排序)。

阅读全文 →

使用 explain 分析 SQL

使用 explain 分析 SQL

explain 显示了 MySQL 是如何使用索引来处理 select 语句和连接表。使用 explain 可以帮我们选择更好的索引和写出更优化的查询语句。

执行结果

一个 explain 语句执行的结果如下:

id

id 是 select 语句的标识符,没有什么意义,如果有子查询的话 explain 结果会有两条记录,id 分别是 1 和 2。这个序号代表了 sql 语句执行的顺序。

阅读全文 →

Linux 禁止用户登录

禁止 ssh 登录

编辑 /etc/ssh/sshd_config

假如 bot 为需要禁止的用户,botGroup 是需要禁止的用户组

# 黑名单
DenyUsers <username>
DenyGroups <groupname>
# 白名单
AllowUsers <username>
AllowGroups <groupname>

禁止 ip 登录

编辑文件/etc/hosts.allow

阅读全文 →

深入理解 Context

深入理解 Context

概览

Golang 的 context 包很多时候被用来处理 Goroutine 链的数据共享,退出等操作。

这里主要描述 Context 的使用示例和内部实现。

特性

  • Context 是并发安全的。

  • 支持树状的上级控制下级,不支持反向控制和平级控制。

阅读全文 →

Go 中的 nil

Go 中的 nil 表示一个类型的零值,nil 不是关键字。

指针

如果一个方法的接收者类型是指针,即使这个对象的值是 nil,指针的方法也可以正常执行。

type person struct{}

func (p *person) Say() {
        fmt.Println("hello")
}

func (p person) Say1() {
        fmt.Println("hello1")
}

func main() {
        var p *person
        fmt.Println("p: ", p)
        p.Say() // hello
        p.Say1() // panic
}

Slice

一个为 nil 的 slice,除了不被索引,其他操作都是可以的。

阅读全文 →

docker 使用

安装部署和常用命令

首先需要检查系统版本是否支持 Docker,现在新版本大部分已经支持了 Docker。

安装 Docker

yum install docker -y
systemctl start docker

# 官方安装命令
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

基本命令

搜索镜像

docker search centos

默认从国外拉取,速度比较慢,可以使用大陆的镜像加速,参考 https://docker-cn.com/registry-mirror(现在很多镜像已经不可用了)。

阅读全文 →

创建基于 Docker 的开发环境

创建基于 Docker 的开发环境

目的: 构建一个可以运行 python 项目的容器。

构建容器

新建一个目录,比如 python_env,编辑 Dockfile, pip.conf, requirements.txt 三个文件。

pip.conf 是用来给 pip 配置镜像地址的。

[global]
index-url = <http://mirrors.aliyun.com/pypi/simple/>
[install]
trusted-host=mirrors.aliyun.com

requirements.txt 写需要安装的 python 依赖。

阅读全文 →