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 |