对于Mysql常用的SQL语句比如select、create、insert、update、delete、join、order by、group by等等相信大家都不陌生;但对于一些不是很常用却又十分有用的语句在要使用的时候却经常记不起来如何写。所以小编特地梳理le一下这些语句,希望对大家有所帮助。
一、导出数据库
说到导出数据库,大家肯定能mysqldump,由于mysqldump使用时涉及到比较多的参数,所以在使用mysqldump时对这些参数基本记不全,那么我们先来熟悉一下常用的参数,如下表:
参数 功能
-u 用户名
-p 密码
-h 主机IP
–all-databases 或者-A 导出全部数据库
–add-drop-database 在创建数据库之前添加drop数据库语句
–add-drop-table 在数据表创建之前添加drop数据表语句
(默认为打开状态)
–skip-add-drop-table 取消drop语句
–add-locks 在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(默认为打开状态)
–skip-add-locks 取消LOCK语句
–complete-insert 或者 -c 使用完整的insert语句(包含列名称)
–databases 或者 -B 该选项后面跟着要导出的多个数据库,以空格分隔
–events 或者 -E 导出事件
–no-create-db 或者 -n 只导出数据,而不添加CREATE DATABASE 语句
–no-create-info 或者-t 只导出数据,而不添加CREATE TABLE 语句
–no-data 或者 -d 只导出数据库表结构
–triggers 导出触发器(默认为打开状态)
–skip-triggers 取消导出触发器
–routines 或者 –R 导出存储过程以及自定义函数
1、导出整个数据库
mysqldump –uroot –p111111 –h172.30.14.242 dbname >mydb.sql
2、导出存储过程及函数
mysqldump –uroot –p111111 –h172.30.14.242 -ntd -R dbname > prorfunc.sql
3、导出数据库表
mysqldump –uroot –p111111 –h172.30.14.242 dbname tablename>mydb.sql
若只需要导出表结构,可以增加参数-d或者–no-data
若只需要导出表数据,可以增加参数-t或者–no-create-info

二、导入数据库
1、未连接数据库时导入
mysql –uroot –p111111 –h172.30.14.242 dbname < mydb.sql

2、连接数据库时导入

连接数据库
mysql –uroot –p111111 –h172.30.14.242
指定了客户端和服务器之间传递字符的编码规则为utf8
set names utf8
使用数据库
use dbname
导入数据库
source /tmp/mydb.sql

三、其他数据导出/导入方式
SELECT INTO…OUTFILE语句把表数据导出到一个文本文件中,并用LOAD DATA …INFILE语句恢复数据。但是这种方法只能导出或导入数据的内容,不包括表的结构。
1、SELECT INTO…OUTFILE语法
语句:SELECT * FROM mytable INTO OUTFILE ‘/tmp/mytable.txt’;
可以通过命令选项来设置数据输出的指定格式,如下语句为导出CSV格式:
SELECT * FROM passwd INTO OUTFILE ‘/tmp/runoob.txt’ FIELDS TERMINATED BY ‘,’ ENCLOSED BY ‘"’ LINES TERMINATED BY ‘\r\n’;

FIELDS子句:在FIELDS子句中有三个亚子句:TERMINATED BY、 [OPTIONALLY] ENCLOSED BY和ESCAPED BY。如果指定了FIELDS子句,则这三个亚子句中至少要指定一个。
(1)TERMINATED BY用来指定字段值之间的符号,
(2)ENCLOSED BY子句用来指定包裹文件中字符值的符号
(3)ESCAPED BY子句用来指定转义字符
LINES子句:在LINES子句中使用TERMINATED BY指定一行结束的标志,

2、LOAD DATA …INFILE语句是SELECT INTO…OUTFILE语句的补语,该语句可以将一个文件中的数据导入到数据库中。
语句:
LOAD DATA LOCAL INFILE ‘dump.txt’ INTO TABLE mytbl FIELDS TERMINATED BY ‘:’ LINES TERMINATED BY ‘\r\n’;
LOAD DATA 默认情况下是按照数据文件中列的顺序插入数据的,如果数据文件中的列与插入表中的列不一致,则需要指定列的顺序。如,在数据文件中的列顺序是 a,b,c,但在插入表的列顺序为b,c,a,则数据导入语法如下:
LOAD DATA LOCAL INFILE ‘mytable.txt’ INTO TABLE mytable (b, c, a)

四、字符串操作
1、字符串拼接
CONCAT(s1,s2,…)函数
将所有字符串拼接在一起
SELECT CONCAT(‘2019’,‘06’,‘18); 执行结果:20190618
CONCAT_WS(s,s1,s2,…)函数
通过第一个字符串s将后面的所有字符串拼接在一起
SELECT CONCAT_WS(’-’,‘2019’,‘06’,‘18’); 执行结果:2019-06-18
2、字符串替换
REPLACE(s,s1,s2)函数
将字符串s中的s1字符串替换为s2字符串
SELECT REPLACE(‘hello name’,‘name’,‘world’); 执行结果:hello world
五、时间函数
1、时间转字符串
DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据
语法:DATE_FORMAT(date,format)

format 规定日期/时间的输出格式。
属性 说明
%Y 年,4 位
%m 月,数值(00-12)
%d 月的天,数值(00-31)
%T 时间, 24-小时 (hh:mm:ss)
%H 小时 (00-23)
%i 分钟,数值(00-59)
%s 秒(00-59)
%U 周 (00-53) 星期日是一周的第一天
%u 周 (00-53) 星期一是一周的第一天
%W 星期名
%w 周的天 (0=星期日, 6=星期六)

select DATE_FORMAT(now(),’%Y-%m-%d %T’);
执行结果:2019-07-09 15:35:19
select DATE_FORMAT(now(),’%Y-%m-%d %H:%i:%s’);
执行结果:2019-07-09 15:36:02
2、字符串转时间
STR_TO_DATE() 用于将字符转化为日期/时间格式
语法:STR_TO_DATE(string, format)
SELECT STR_TO_DATE(“2019 07 07”, “%Y %m %d”);
执行结果:2019-07-07
3、时间运算
函数从日期加上指定的时间间隔
DATE_ADD(date,INTERVAL expr type)
函数从日期减去指定的时间间隔
DATE_SUB(date,INTERVAL expr type)

type可取值为:
SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、EAR
SELECT DATE_ADD(now(),INTERVAL 2 DAY);
执行结果:2019-07-11 15:48:36
SELECT DATE_SUB(now(),INTERVAL 2 DAY);
执行结果:2019-07-07 15:48:37
六、浮点数运算后的精度控制
1、转化指定精度的字符串
FORMAT函数在mysql中是数据内容格式化,可以格式化数据为整数或者浮点数,整数部分超过三位的时候以逗号分割,并且返回的结果是string类型的。
SELECT FORMAT(1012.232,2);
执行结果:1,012.23
2、转化指定精度的浮点数
FORMAT函数返回的是字符串形式数据,若要返回浮点数,我们使用CONVERT()函数。
SELECT convert(1012.232, decimal(12,2));
执行结果:1012.23