Mysql Commands

MySQL是一种关系型数据库管理系统,其将数据保存在不同的表中,增加了速度与灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用的标准化语言,由于其体积小、速度快、总体拥有成本低,一般中小型和大型网站的开发都选择MySQL作为网站数据库。此博文将会记录笔者学习MySQL的全过程,其中包括了MySQL知识的总结归纳与个人的思考启发。对于MySQL的学习,笔者决定从bilibili上的黑马程序员教学视频(MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化全囊括)入手(嘿嘿^^打个广告,黑马程序员yyds),该教学视频由浅入深,对于初学者及其友好。读者亦可将此博文作为MySQL速查表,以便于快速查找MySQL命令。

MySQL学习路线

基础篇 进阶篇 运维篇
数据库概述 存储引擎 日志
SQL语句 索引 主从复制
函数 SQL 优化 分库分表
约束 视图/存储过程/触发器 读写分离
多表查询
事务 InnoDB核心
MySQL管理

数据库概述

名称 定义 简称
数据库 存储有组织数据的仓库 DataBase(DB)
数据库管理系统 操纵和管理数据库的大型软件 DataBase Management System(DBMS)
SQL 操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准 Structured Query Language(SQL)

SQL语句

DDL - Data Definition Language Function
show databases; 查看所有数据库
create database 数据库名; 创建数据库
use 数据库名; 切换到某个数据库
select database(); 当前处于哪个数据库中
drop database 数据库名称; 删除数据库
show tables; 查询当前数据库所有表
desc 表名; 查询表结构
show create table 表名; 查询指定表的建表语句
create table tableName(name type comment ‘xx’, name type comment ‘xx’) comment ‘xx’; 创建数据表
alter table 表名 add 字段名 类型 [comment]; 添加字段
alter table 表名 modify 字段名 新数据类型; 修改字段数据类型
alter table 表名 change 旧字段名 新字段名 数据类型; 修改字段名和字段类型
alert table 表名 drop 字段名; 删除字段
alter table 表名 rename to 新表名; 修改表名
drop table [if exists] 表名; 直接删除表
truncate table 表名; 删除表并重新创建该表

DML - Data Manipulation Language Function
insert into 表名 (字段名1, 字段名2…) values (值1, 值2…); 给指定字段添加数据
insert into 表名 (字段名1, 字段名2…) values (值1, 值2…), (值1, 值2…), (值1, 值2…), …; 给指定字段添加数据(批量)
insert into 表名 values (值1, 值2…); 给全部字段添加数据
insert into 表名 values (值1, 值2…), (值1, 值2…), (值1, 值2…), …; 给全部字段添加数据(批量)
注意事项:
关于插入数据
1: 指定的字段顺序需要与值的顺序一一对应。
2: 字符串与日期型数据应该包含在引号(’’)中。
3: 插入数据的大小,需要在字段的规定范围内。
update 表名 set 字段名1 = 值1, 字段名2 = 值2, …[where condition]; 修改数据
delete from 表名 [where condition]; 删除数据

DQL - Data Query Language Function
select 字段名1, 字段名2, 字段名3 from 表名; 查询指定字段
select * from 表名; 查询所有字段 (不推荐在实际开发中使用)
select 字段名 as ‘别名’ from 表名; 查询字段并取别名
select distinct 字段名 from 表名; 查询字段中不重复的数据
select 字段名 from 表名 where 条件列表;
between number1 and number2
字段名 in(字段值1, 字段值2, 字段值3…..)
like ‘占位符’
is null / is not null
条件查询
在某个范围内(包括边界值)
查询字段值为字段值1, 字段值2, 字段值3…..的记录
模糊匹配(’_‘匹配单个字符, ‘%’匹配任意多个字符)
字段值为空/非空
select 聚合函数(字段名) from 表名;
count()
max()
min()
avg()
sum()
聚合函数
统计数量
最大值
最小值
平均值
求和
select 字段 from 表名 where 条件列表 group by 分组字段名 having 分组后过滤条件;
注意事项:
关于分组查询
分组查询
where是分组之前过滤,having是分组之后过滤
where不能对聚合函数进行判断,而having可以
执行顺序:where > 聚合函数 > having
select 字段 from 表名 order by 字段1 排序方式1, 字段2 排序方式2; 排序查询
排序方式:asc—升序 ~ desc—降序
select 字段 from 表名 limit 起始索引, 查询记录数;
注意事项:
关于分页查询
分页查询
起始索引 = (查询页码 - 1)* 前面每页显示记录数
也可以理解为从起始索引之后一条记录开始查询
若查询第一页数据,可省略起始索引
FROM 表名 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 SELECT 字段列表 ORDER BY 排序字段列表 LIMIT 分页参数 DQL执行顺序

DCL - Data Control Language Function
use mysql; select * from user;
create user ‘username’@‘hostname’ identified by ‘password’;
alter user ‘username’@‘hostname’ identified with mysql_native_password by ’new password’;
drop user ‘username’@‘hostname’;
查询用户
创建用户 (%可作为通配符使用)
修改用户密码
删除用户
show grants for ‘username’@‘hostname’;
grant 权限1, 权限2… on 数据库名.表名 to ‘username’@‘hostname’;
revoke 权限1, 权限2… on 数据库名.表名 from ‘username’@‘hostname’;
查询权限
授予权限
撤销权限
ALL—所有权限 · SELECT—查询数据 · INSERT—插入数据 · UPDATE—修改数据
DELETE—删除数据 · ALTER—修改表 · DROP—删除数据库/表/视图 · CREATE—创建数据库/表
授权时可使用通配符 *

函数

字符串函数 功能
concat(S1, S2, …) 字符串拼接
lower(str) 将字符串str全部转为小写
upper(str) 将字符串str全部转为大写
lpad(str, n, pad) 左填充,用字符串pad对str的左边进行填充,达到n个字符串的长度
rpad(str, n, pad) 右填充,用字符串pad对str的右边进行填充,达到n个字符串的长度
trim(str) 去掉字符串头部和尾部的空格
substring(str, start, len) 返回字符串str从start位置起的len个长度的字符串(MySQL起始索引为1)

数值函数 功能
ceil(x) 向上取整
floor(x) 向下取整
mod(x, y) 返回x/y的模
rand() 返回0~1内的随机数
round(x, y) 求参数x的四舍五入的值,保留y位小数
日期函数 功能
curdate() 返回当前日期
curtime() 返回当前时间
now() 返回当前日期和时间
year(date) 获取指定date的年份
month(date) 获取指定date的月份
day(date) 获取指定date的日期
date_add(date, INTERVAL expr type) 返回一个日期/时间值加上一个时间间隔expr后的时间值
datediff(date1, date2) 返回date1(新)和date2(旧)之间的天数
流程控制函数 功能
if (value, t, f) 如果value为true,则返回t,否则返回f
ifnull(value1, value2) 如果value1不为空,则返回value1,否则返回value2
case (字段名) when (value1) then (result1)… else (default) end
eg: case workAddress when “Beijing” then “Big city” else “Small city” end
如果字段名=value1,则返回result1,否则返回default
case when (expression1) then (result1) when (expression2) then (result2) else (default) end
eg: case when math >= 85 then “HD” when math >= 60 then “C” else “F” end
如果 expression1为true,则返回result1,否则返回default