入门
MySQL服务启动和停止
# 启动服务
net start <服务名>
# 停止服务
net stop <服务名>
连接MySQL
# 携带地址端口连接
mysql -h localhost -P 3306 -u root -p *****
# 本机连接
mysql -u root -p *****
# 退出
exit
或者 ctrl + c
MySQL基本命令
# 列出所有数据库
show databases;
# 打开数据库
use 数据库名;
# 列出数据库所有表
show tables; -- 列出当前数据库所有表
show tables from; <数据库名> -- 列出指定数据库所有表
# 查看所在的库
select database();
# 创建表
create table <表名>(
id int,
name varchar(20)
);
# 查看表结构
desc <表名>;
# 查看数据库版本
select version();
MySQL语法规范
- 不区分大小写,但是建议关键字大写,表名、列名小写
- 每条命令最好用分号结尾
- 每条命令根据需要,可以进行缩进或换行
- 注释
- 单行注释:# 注释文字
- 单行注释:-- 注释文字
- 多行注释:/* 注释文字 */
MySQL介绍
MySQL分类
DQL语言(数据查询)
- 基础查询
- 条件查询
- 排序查询
- 常见函数
- 分组函数
- 分组查询
- 连接查询
- 子查询
- 分页查询
- union联合查询
DML语言(数据操纵)
- 插入语句
- 修改语句
- 删除语句
DDL语言(数据定义)
- 库和表管理
- 常见数据类型
- 常见约束
TCL语言
- 事务和事务处理
MySQL语法
SELECT基础查询
# 查询单表信息
select
<查询列表>
from
<表名>;
-- 查询列表可以是:表中字段、常量值、表达式、函数
-- 查询的结果是一个虚拟的表格
-- 多个字段用逗号隔开
起别名
# 查询后起别名
select <字段名> as <别名名称> from <表名>;
-- as可以省略
去重
# distinct关键字
select distinct <字段名> from <表名>;
-- 在字段前加上关键字
“+”作用
-- 两个为数值型,做加法运算
100 + 90 = 190
# 有一方为字符型,试图将字符型数值转换成数值型。
'123' + 90 = 213
-- 如果转换成功,继续做加法运算
'john' + 90 = 90
-- 如果转换失败,则将字符型数值转换成0,再做加法
null + 10 = null
-- 只要一方为null,则结果为null
- null+任意值为null,可以使用
ifnull()
函数:ifnull(a,b),如果a为null,则显示b - 如果使用字符串拼接,可以使用
concat()
函数:concat(a,b)
条件查询
select
<查询列表>
from
<表名>
where
<筛选条件>;
条件分类
- 1.条件表达式筛选
- 简单条件运算符:> < = != <> >= <=
- 2.按逻辑表达式筛选
- 逻辑运算符:&& || ! and or not
- 3.模糊查询
- like
- between and
- in
- is null
排序查询
- order by子句中支持单个字段、多个字段、表达式、函数、别名
- order by子句一般放在查询语句最后面,但是limit子句除外
select
<查询列表>
from
<表名>
where
...
order by
<排序列表> [asc|desc]
# 多个排序字段使用逗号隔开
-- asc升序 默认
-- desc降序
MYSQL常见函数
函数分类
- 单行函数:concat、length、ifnull等
- 分组函数
- 功能:做统计使用,又成为统计函数、聚合函数、组函数
单行函数
1、字符函数
length() -- 获取参数值的字节个数
concat() -- 拼接字符串
upper() -- 字符变大写
lower() -- 字符变小写
substr()、substring() -- 字符串截取(索引从1开始)
instr() -- 返回子串第一次出现的索引,找不到返回0
trim() -- 去除前后字符,默认去除空格
lpad() -- 用指定字符实现左填充指定长度
rpad() -- 用指定字符实现右填充指定长度
replace() -- 替换
2、数学函数
round() -- 四舍五入
ceil() -- 向上取整
floor() -- 向下取整
truncate() -- 截断
mod() -- 取余
-- 求余原理:
-- mod(a,b) : a-a/b*b
3、日期函数
now() -- 返回当前系统日期+时间
curdate() -- 返回当前系统日期,不包含时间
curtime() -- 返回当前时间,不包含日期
year() -- 获取年
month() -- 月
monthname() -- 获取英文的月
str_to_date('','') -- 将日期格式字符转换成指定格式日期
date_format() -- 将日期转换成字符
四、函数
version()
database()
user()
五、流程控制函数
if('表达式', 'true', 'false') -- 判断效果
case() -- switch case效果
/*
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end
*/
case函数使用二: 类似多重if
/*
case
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
...
else 要显示的值n或语句n
end
*/
分组函数
用于统计使用
sum() -- 求和
avg() -- 平均值
max() -- 最大值
min() -- 最小值
count() -- 计算个数
参数支持的类型
1、sum、avg一般用于处理数值型
max、min、count可以处理任何类型
2、以上分组函数都忽略null值
3、可以和distinct搭配使用
4、count函数的单独介绍:一般使用count(*)用作统计行数
5、和分组函数一同查询的字段要求是group by后的字段
分组查询
select 分组函数, 列(要求出现在group by后面)
from 表
[where 筛选条件]
group by 分组的列表
[order by 子句]
注意: 查询列表必须特殊,要求是分组函数和group by后出现的字段
2、group by子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开没有顺序要求),表达式或函数(用得较少)
3、也可以添加排序(排序放在整个分组查询最后)
having
对分组后的条件进行筛选,在group by 之后
连接查询
又称多表查询,当查询的字段来自于多个表
笛卡尔积先写:表1有m行 表2有n行 结果为m*n行
当没有添加有效连接条件时会出现笛卡尔积
连接分类:
年代分类:
sq192标准:仅仅支持内连接
sql99标准【推荐】支持内连接+外连接(左右)+交叉连接
按功能分类:
内连接:
等值连接
非等值连接
自连接
外连接:
左外连接
右外连接
全外连接
交叉连接
如果给表起了别名,则查询的字段就不能使用原来的表名去限定