Mysql 常用命令记录与数据导入导出

前一阵在写很多sql及类sql语句,发现自己的记忆力可以说是相当烂了,上午刚查过插入语句怎么写,下午就忘记了需要重新查,,而且隐隐约约的有点强迫症??只要记得不是特别清晰,就需要去重新查,看,记一遍,十分浪费时间,因此在这里将自己用到的sql语句记下来,方便后续的查找!!

PS:以个人习惯记录,切勿直接copy执行。文中命令/方法只是本人使用过的一些,不覆盖所有,例如:数据库导入导出还有其他多种方式,有兴趣可以自行研究。

PSS:我发现我终于记住了,在写下面表格时基本没有去查了。。

PSSS: 所有命令都手动实践过(不包含拼写错误),因此可以放心使用。

PS4: 如果大家觉得我写的不好,给大家介绍一个mysql学习的网站unoob.com ,这个网站有队mysql的基本入门介绍,且分类,示例都做的比较好。(我也是在上面学习的哈哈哈哈)。

基础语句

功能

语句

备注

插入语句

insert into 表(字段) values (值);

查找语句

select 字段 from 表 where 条件 order by 列 limit 数量

order/limit非必须

删除语句

delete from 表名 where 条件

修改语句

update 表名 set 字段=值 where 条件

去重值

select distinct 列名 from 表 where 条件

列名可以为多个,但同时作用于多个,使用需谨慎

模糊查找 like

select 列名 from 表 where 列 like ‘%嘻嘻%’;

谨慎使用,有性能问题

模糊查找 contact

省略前面 where 列 contact(‘%’,#{name},’’);

用于mybatis

数据库导入与导出

导出sql文件

  • 导出数据库的结构及数据 mysqldump -u 数据库用户名 -p 数据库名>导出路径及文件名 //example mysqldump -u huyanshi -p mydb>~/Desktop/mydb.sql
  • 导出数据库中某张表结构及数据 mysqldump -u 数据库用户名 -p 数据库名 表名>导出路径及文件名 //example mysqldump -u huyanshi -p mydb mytable>~/Desktop/mydb_mytable.sql
  • 导出数据库全部表结构 mysqldump -u 数据库用户名 -p -d --add-drop-table 数据库名>导出路径及文件名 //example mysqldump -u huyanshi -p -d --add-drop-table mydb >~/Desktop/mydb_st.sql
  • 导出某张表的结构 mysqldump -u 数据库用户名 -p -d --add-drop-table 数据库名 表名>导出路径及文件名 //example mysqldump -u huyanshi -p -d --add-drop-table mydb mytable >~/Desktop/mydb_mytable_st.sql

导出excel

有时会有一些运营/hr/IT来找你让你导出一些简单的数据,这个时候呢,工具化当然是一劳永逸的方法,但是大部分时间下我们正在着急的完成新feature(改bug),并没有时间来将数据查询工具化,那么此时,简单的给其一个excel就是一种良好的替代方法,excel也可以较为清晰的展(TA)示(men)数(xi)据(huan)。

mysql -u 数据库用户名 -p -e "查询语句" 数据库名>导出路径及文件名
//example
mysql -u huyanshi -p - e "select * from mytable" mydb>~/Desktop/result.xls

从sql文件导入

1.进入mysql命令行,创建数据库,使用数据库后执行source

mysql -u 数据库用户名 -p
输入密码
use mydb
source 文件路径及文件名

从xls文件导入

如果有这个需求的话,我建议写一个脚本进行导入,因为可以在脚本中保证数据的正确性,防止后续对数据进行处理时出现各种意外情况,同时,个人在遇到此需求时也都是使用脚本进行导入,对简单的命令没有研究,因此不做介绍。后续如果碰到新的需求可能会将脚本贴在这里。

关键字使用

distinct

distinct的效果为去重,举例如下: 现有数据

name

score

zhangsan

600

lisi

520

zhangsan

230

huyan

600

lisi

400

假设上表是学生的考试成绩,现在我们想知道表格中共有多少个学生,即获取第一列不重复的值

select distinct name from record;

返回结果为:

name

zhangsan

lisi

huyan

基本用法很简单,但是distinct 有一个限制,即去重列必须是返回列,比如:

select distinct name,socre from record;

该语句会对(name+score)的组合进行去重,即(zhangsan,600)和(zhangsan,230)会被认为是不同的两个记录。

想要实现类似于:“name字段去重,对于重复值取分数最高”这种效果需要自己实现,distinct不可以。

group by

group by语句可以实现对数据以一列或者多列进行分组,例如可以使用group by实现distinct的功能。

select name from record group by name

而在实际使用过程中,group by 语句经常和函数(求和,求均值,计数等)一起使用,(毕竟如果分组不是为了统计,那将毫无意义)。语句使用规范如下:

select 列名,函数 from 表名 group by 列名  having 条件

例如统计每个学生的分数之和:

select name,sum(score) from record group by name;

得到结果如下图:

name

sum(score)

zhangsan

830

lisi

920

huyan

600

group by语句也有类似于distinct的限制,查询的字段除了聚合函数(SUM ,AVG,COUNT…)以外 必须只能是分组的字段。即:

//错误语句
select name,score from record group by name;

会报错。其实想想,如果该语句不报错,那么同一个name对应的两个score应该返回哪一个值呢?

having 语句

having 语句一般与group 语句一起使用,作用为:对分组后的数据进行筛选,类似于where子句的语法,但是where子句作用于每一独立行,having语句作用于每一分组后的行。 示例:

select name,sum(score) from record having sum(score) > 650;

该语句会按name分组查询并取到score的总和,且过滤掉总和小于650的行。结果为: name | sum(score)| —|— zhangsan | 830 lisi | 920

order by

order by 语句一般在其他的基础语句后连接使用,功能为对返回结果进行排序,使用规则如下:

select * from record order by 列名1,列名2 [ASC][DESC]

mysql 可以对多个列排序,当有多个列时,仅当第一个列相同时使用第二个列进行排序。 mysql 默认使用升序,可以使用[DESC] 来使查询结果逆序输出。 示例:

select * from record order by score DESC;

查询结果为:

name

score

zhangsan

600

huyan

600

lisi

520

lisi

400

zhangsan

230

完。

ChangeLog

2018-09-02 添加基础语句 2018-09-04 添加数据库的导入导出 2018-09-08 添加distinct,group by,order by, having等基础语句的使用

以上皆为个人所思所得,如有错误欢迎评论区指正。

欢迎转载,烦请署名并保留原文链接。


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券