MySQL Cheat Sheet
基础命令
登录:mysql -uroot -p[密码]
退出:exit、quit
查看数据库列表:show databases;
使用某个数据库:use [数据库名];
查看当前使用的数据库名:select database();
创建数据库:create database [数据库名];
删除数据库:drop database [数据库名];
查看数据库表名:show tables;
执行SQL脚本:use 某个数据库时source [不带中文的路径],Windows可能要用两个反斜杠
查看表所有数据:select * from [表名];
查看表结构:desc [表名];
查看 MySQL 版本:select version();
Windows中打开服务:
net start mysql80Windows中关闭服务:
net stop mysql80注意这两个命令是在cmd里面输入的,mysql80是安装MySQL在windows服务界面配置的服务名,默认mysql80
除了命令行,还可以通过Windows的
服务手动打开和关闭
其他命令
SHOW STATUS;显示广泛服务器状态信息SHOW GRANTS;显示授权用户的安全权限SHOW ERRORS;服务器错误信息SHOW WARNINGS;服务器警告信息show engines \G查看存储引擎show create table [表名];查看创建语句:
导出数据(退出MySQL到命令行):
例子:
--single-transaction选项: 该选项适用于 InnoDB 引擎的表,可以在导出时启动一个事务,从而避免锁表。使用该选项,mysqldump 会在导出过程中保持数据的一致性,而不需要锁定表,这样其他进程仍然可以对数据库进行读写操作
在目标服务器上,使用 mysql 客户端来导入数据库。首先需要创建数据库(如果它还不存在),然后导入
Select
简单查询
查询多个字段:select [字段名],[字段名]... from [表名];
查询所有字段:select * from [表名];
列起别名:
select [字段名] as [别名] from [表名];
select [字段名] [别名] from [表名];
select [字段名] ‘[别名]’ from [表名];(别名是中文或带空格的方案)
字段可以带有数学表达式,例如:select ENAME, SAL*12 'YEAR SALE' from emp;
条件查询
格式:
例子:
条件:
大小关系:
=, !=, <, >, <>两个值之间(包含):
between [值1] and [值2]判断为空:
is null和is not null并且:
and或:
or(and 优先级比 or 高,加括号改变优先级)是否包含:
in ([值1], [值2]...)和not in ([值1], [值2]...)模糊查询:
like [值](% 代表 0 到任意多个字符, _ 代表任意一个字符,注意 \ 转义)
多情况讨论
格式:
例子:
子查询
语法:
在 select, from, where 子句中嵌套查询
例子:
正则表达式
\\ 代表转义
[0-9] 匹配 0~9 的任意一个字符
? 代表其前一个字符出现1次或0次
此处 ^ 代表匹配串的开始
union
语法:
注:合理运用 union, 查询次数可以优于 join (例如多表连接)
注:要求结果的列数和数据类型相同
例子:
UNION 自动去除重复的行,使用 UNION ALL 包含重复的行
UNION 中若要排序,只允许出现一次,放在最后的 SELECT 语句后
单行处理函数
转大小写:
lower(字段名)和upper(字段名)提取子串:
substr(字段名, 起始下标, 截取长度)注:起始下标从 1 开始拼接成字符串:
concat(字段名1, 字段名2)长度:
length(字段名)去空格:
trim(字段名)四舍五入:
round(字段名, 小数位)生成随机数:
rand()处理 NULL:
ifnull(字段名, 被当做的值)条件表达式:
if(条件,为真的值,为假的值)ABS(): 返回一个数的绝对值。CEILING(): 返回大于或等于给定数值的最小整数。FLOOR(): 返回小于或等于给定数值的最大整数。ROUND(): 四舍五入到指定的小数位数。MOD(): 返回除法操作的余数。FORMAT(): 格式化数字为格式化的字符串,通常用于货币显示。
例子:
限制结果条数
语法:
**例子:**偏移量是从 0 开始的,即第一条记录的偏移量是 0;如果想从第 3 条记录开始,偏移量就应该是 2。
排序
格式:
例子:
规则:
默认升序:
[字段名]指定降序:
[字段名] desc指定升序:
[字段名] asc多个字段排序:
[字段名1] [排序方式], [字段名2] [排序方式]...(靠前的规则优先)根据查询结果的字段位置排序:
[数字]
分组
格式:
例子:
分组函数(多行处理函数):
最大最小:
max(字段名)和min(字段名)求和:
sum(字段名),可以加入判断例如sum(a.id<10)平均:
avg(字段名)数量:
count(字段名)计算不为 null 的数量,count(*)包括 null 的数量
对于判断,例如
a.id<10,返回的是0或1,对于 count,因为不为 null 都计数,所以count(a.id<10)没有意义,无论0或者1都计数,对于sum函数可以累加返回1的个数
关键字补充
去重:
distinct(放在所有字段前,后面字段联合去重)WITH ROLLUP 在分组中使用,获得汇总值
join
内连接
SQL99语法:
注:A B 两表没有主次关系,只看表连接条件,inner 可省略
例子:
外连接
语法:
注:right 意思是表 B 为主表,left 意思是表 A 为主表,outer 可省略
例子:
自联结
例:寻找与 prod_id = 'DTNTR' 产品相同供应商的产品
自然连接
不重要的概念,指联结后不出现重复的列
DQL 语句总结
格式:
执行顺序:
from
where
group by
having
select
order by
limit
例子:每个部门工资最多的人
修改表结构
创建表
注:default [默认值] 可省略
删表
数据类型:
varchar 可变长度字符串(最长255)
char 定长字符串(最长255)
int
bigint 长整型
float
double 短日期
datetime 长日期,年月日时分秒
date 短日期,年月日
clob 字符大对象,可存 4G 字符串
blob 二进制大对象,例如媒体数据
例子:
添加列:
删除列:
添加约束:
重命名表
约束
非空约束 :
not null唯一性约束(NULL不算):
unique联合唯一:
unique([字段名1],[字段名2]...)主键约束(非空,唯一):
primary key复合主键(不建议使用):
primary key([字段名1],[字段名2]...)设置自然主键:
auto_increment外键约束:
foreign key([子表字段名]) references [父表名]([父表unique字段名])
例子:
隔离
查看隔离级别:
改变隔离级别:
隔离级别:
read uncommitted:可以查到未提交的数据read committed:查已提交的数据repeatable read:只要另一方开启事务就不会查到对应数据serializable:非并行,排队
索引
查看索引:
添加索引:
注:主键与 unique 自动添加索引
删除索引:
注:索引可以缩短查询时间,但模糊查询,类型转换,or条件,索引字段参与运算或函数等等情况会使其失效
insert 插入数据
格式:
注:([字段名1], [字段名2], [字段名3]...) 可省略,values 要填写全部信息
例子:
日期操作
字符串转date:
注:如果日期格式为'%Y-%m-%d',不用函数也能将字符串转date
date转字符串:
注:默认日期格式为'%Y-%m-%d' 注:如果是datetime,默认日期格式为'%Y-%m-%d %h:%i:%s'
获取当前时间:
年
月
日
时
分
秒
例子:
返回当前日期
返回当前时间
返回当前日期和时间
返回日期部分
返回时间部分
返回年部分
类比
类比
类比
类比
类比
例子:
update 修改数据
格式:
例子:
删除表中数据
格式:
注:delete支持回滚,速度慢。truncate 物理删除,速度快
例子:
类型
属于 DML
属于 DDL
属于 DDL
回滚
可回滚
不可回滚
不可回滚
删除内容
表结构还在,删除表的全部或者一部分数据行
表结构还在,删除表中的所有数据
从数据库中删除表,所有数据行,索引和权限也会被删除
删除速度
删除速度慢,需要逐行删除
删除速度快
删除速度最快
因此,在不再需要一张表的时候,用 drop;在想删除部分数据行时候,用 delete;在保留表而删除所有数据的时候用 truncate
视图
创建视图:
删除视图:
注:对视图的增删改查格式不变,对视图的改变会影响原表
例子:
全文本搜索
开启全文本搜索支持
全文本搜索为每一条数据给出一个匹配值,最匹配d的记录优先
使用查询扩展,即找出与搜索结果再相关的其他行
布尔文本搜索不需要建立 FULLTEXT 索引,更慢
例子:
-代表排除后面这个词*代表词尾通配符
""将双引号内部的词视为一整个短语
+代表一定有这个词()包含一个子表达式<降低这个词的等级
存储过程
存储过程可以封装一系列复杂的操作
有输入输出
形式类似于函数
创建存储过程
例子1:
DELIMITER重新定义语句分隔符BEGIN,END包含存储过程体存储过程名为
productpricing(),这个例子没有参数
例子2:
这个存储过程有三个函数
OUT代表可以从存储过程传出pl等等为形参名DECIMAL是一种数据类型,精度可变的浮点值
例子3:
IN代表传入参数
例子4:
--表示注释DECLARE声明变量IF,END IF包含分支语句COMMENT内容非必要,将在SHOW PROCEDURE STATUS展示
使用存储过程
例子1:
例子2:
MySQL 变量名由
@开始
例子3:
例子4:
删除存储过程
检查存储过程
游标
通常在存储过程中使用
表示一个
SELECT语句,一次取一条数据,可用于遍历
触发器
在对表内容修改前或后自动触发一些操作
支持语句
INSERT,DELETE,UPDATE使用
BEFORE,AFTER来表示修改后或修改前BEFORE可以用于验证数据如果触发器或语句出错,后续语句和触发器不会执行
合理运用触发器,可以保证数据一致性,追踪保留更改
INSERT 触发器
创建了名为
neworder的触发器在
INSERT orders之后触发FOR EACH ROW代表每一行都触发NEW是一个虚拟表,可以获取新插入的内容
DELETE 触发器
OLD是一个虚拟表,可以访问要删除的信息OLD只读
UPDATE 触发器
NEW虚拟表可以修改,也修改即将更新的内容OLD只读
删除触发器
事务
关闭自动提交机制:start transaction;
回滚:rollback;
提交:commit;
保留点:
保留点在实务中设置
如果不显式释放保留点,则在事务完成后自动释放
创建保留点
退回到保留点
释放保留点
不自动提交更改
用户管理
创建用户
更改口令
查看用户
重命名用户
删除用户
查看权限
USAGE代表没有权限
授予权限
具体到权限表见书
例子:
撤销权限
最后更新于