MySQL数据库
前言
本篇为本人从零开始学习数据库的日常记录,不定时更新,本人并非互联网行业的从业人员,所处行业常年游离在数字化的边缘,近年来随着互联网的高速发展,大量企业被迫转型,而在转型初期,基于未标准化的各种数据所开发的软件,其开发、迭代都十分耗费人力,故需先行标准化数据库,所以我开始学习MySQL,在网络和书中学习后对知识点进行整理产生了本篇,整理后希望本篇能在温故知新之余,也能帮助到后人。
目录
一、MySQL数据库的下载
- 下载地址:https://dev.mysql.com/downloads/
- 选择MySQL Installer for Windows:由于windows比较常用,所以用windows进行学习,降低准入门槛
- 本人使用版本: MySQL Ver 8.0.26 for Win64 on X86_64
- 下载
二、数据库的安装
- 退出系统中目前正在运行的所有软件
- 打开mysql.msi
- 接受协议,下一步
- 选择自定义安装,下一步
- 找到mysql组件,添加至右边,更改路径,建议只改盘符,下一步
- 安装成功
三、数据库的配置
- 自动弹出配置程序
- 如未弹出,或配置错误,可以打开安装路径–>bin目录下MySQLInstanceConfig.exe进行配置
- 选择精确配置,下一步
- 选择开发机,该选项影响占用内存,下一步
- 选择多功能数据库,影响存储引擎速度,下一步
- 选择并发数量,建议20,下一步
- 选择端口号,默认为3306,真实开发环境建议更改端口号,避免恶意攻击
四、MySQL产品的介绍和安装
MySQL服务的启动和停止
方法一:计算机-右键管理-服务
方法二:通过管理员身份运行CMD
net start 服务名(启动服务)
net stop 服务名(停止服务)
MySQL服务的登陆和退出
方法一:通过mysql自带的客户端
只限于root用户
方法二:通过windows自带的客户端
登陆:
mysql 【-h主机名 -P端口号 】-u用户名 -p密码
MySQL的常见命令
- show databases;显示数据库
- use test;进入数据库
- show tables;显示当前数据库中的表
- show tables from mysql;显示指定数据库的表,不更改当前数据库位置
- select database();显示当前数据库位置
- create table+表名(列名1 数据类型,列明2 数据类型);创建表
- select * from 表名; 显示表数据
- insert into 表名 (列名1,列名2) value(数值1,数值2);插入数据
- update 表名 set 列名=‘新列名’ where id=‘列值’;更新数据
- delete from 表名 where id=‘列值’;删除数据
五、DQL–Data Query language语言的学习
① 基础查询
语法
select 查询列表 from 表名;
特点
- 查询列表可以是:表中的字段、常量值、表达式、函数
- 查询的结果是一个虚拟的表格
1. 查询表中的单个字段
select 查询列表 from 表名;
2. 查询表中的多个字段
select 查询列表1,列表2,列表3 from 表名;
3. 查询表中的所有字段
select * from 表名;(有序列表)
4. 查询常量值
select 100;
5.查询表达式
select 100*98;
6. 查询函数
select version();
7. 起别名
特点:
- 便于理解
- 如果要查询的字段有重名的情况,使用别名可以区分开来
- 当AS后面涉及DQL关键字,使用双引号标注
方式一:使用AS
select 100*98 as 结果;
select last_name as 姓,first_name as 名 from 表名;
方式二:使用空格
select last_name 姓,first_name 名 from 表名;
8. 去重
案例:查询表中涉及到所有的部门编号
select distinct department_id from 表名;
9. +号的作用
两个操作数都为数值型,则做加法运算
select 100+90;
其中一方为字符型,试图将字符型数值转换成数值型,如果转换成功,则继续加法运算
select ‘123’+90;
如果转换失败,则将字符型数值转换成0
select ‘john’+90;
只要其中一方为null,则结果肯定为null
select null+0;
10.concat函数
拼接两列或者连接字符串
select concat('a','b','c') as 结果;
② 条件查询
语法
select 查询表名 from 表名 where 筛选条件;
分类
按条件表达式筛选
条件运算符
< = <> != >= <=
案例:查询筛选条件>12000的查询表名
select * from 表名 where 筛选条件>12000;
按逻辑表达式筛选
逻辑运算符
作用:用于连接条件表达式
&&或and
两个条件都为true,结果为true,反之为false
||或or
只要有一个条件为true,结果为true,反之为false
!或not
如果连接的条件本身为false,结果为true,反之为false
案例:查询工资在10000到20000之间的员工名、工资以及奖金
select
last_name,salary,commisiion_pct
from
employees
where
salary>=10000 and
salary <=20000;
模糊查询
like
特点:
- 一般和通配符搭配使用
通配符
-
%:任意多个字符(包含0个字符)
-
_:任意单个字符
转义字符
-
\
-
ESCAPE
SELECT 列名 from 表名 where 列名 like '_$_%' escape '$';
案例:查询表中包含字符a的信息
select
*
from
表名
where
列名 LIKE '%a%';
between and
- 使用between and 可以提高语句的简洁度
- 包含临界值
- 两个临界值必须大于等于左边的值小于等于右边的值
- 类型必须一致
案例:查询编号在100到120之间的信息
select
*
from
表名
where
列名 >= 100 and 列名<=200;
可省略为
select
*
from
表名
where
列名 between 100 and 200;
in
含义:判断某字段的值是否属于in列表中的某一项
特点:
- 使用in提高语句的简洁度
- in列表的值类型必须统一或兼容
- 不支持通配符
案例:查询员工的工种编号是 IT_PRO、AD_VP、AD_PRES中的一个员工名和工种编号
select
last_name,
job_id
from
表名
where
job_id = 'IT_PRO' or job_id = 'AD_VP' OR job_id = 'AD_PRES';
可简化为:
select
last_name,
job_id
from
表名
where
job_id in('IT_PRO','AD_VP','AD_PRES');
is null
特点:
- =或<>不能用于判断null值
- is null 或 is not null 可以判断null
案例:查询列名2为空值的列名1和列名2
select
列名1,
列名2
from
表名
where
列名2 is null;
安全等于<=>
含义:判断是否等于,等于返回True,不等于返回False
案例:查询列名2为空值的列名1和列名2
select
列名1,
列名2
from
表名
where
列名2 <=> null;
③ 排序查询
作用
对查询的结果进行排序
特点
- asc代表的是升序,desc代表的是降序
- 如果不写排序方式,默认是升序
- order by子句中可以支持单个字段、多个字段、表达式、函数、别名
- order by子句一般是放在查询语句的最后面,limit子句除外
select
查询列表
from
表名;
[where 筛选条件]
order by 排序列表1 [asc|desc],排序列表2 [asc|desc];
④ 常见函数
概念
类似于java的方法,将一组逻辑封装在方法体中,对外暴露方法名
好处
- 隐藏了实现细节
- 提高代码的重用性
调用
select
函数名(实参列表)
from
表;
特点
- 叫什么(函数名)
- 干什么(函数功能)
分类
- 单行函数:concat、length、ifnull等
- 分组函数,功能:做统计使用,又称为统计函数、聚合函数、组函数
一、字符函数
1. length
获取参数值的字节个数
select length('john');
select length('张三丰hahaha');
2. concat
拼接字符串
select
concat(列名1,'_',列名2) 别名
from
表名;
3. upper、lower
改变字符的大小写
upper:小写改大写
lower:大写改小写
select
upper('john');
select
lower('JOHN');
select
concat(upper(列名1),'_',lower(列名2)) 别名
from
表名;
4. substr、substring
注意:索引 从1开始
截取从指定索引处后面所有字符
select
substr(str,pos) 别名;
截取从指定索引处指定字符长度的字符
select
substr(str,pos,length) 别名;
5.instr
返回子串第一次出现的索引,如果找不到返回0
select
instr(str, substr)
6.trim
去除字符串的前后指定字符,默认为去除前后空格
select
trim('常量值'
from
' str') as out_put;
7. lpad
用指定的字符实现左填充指定长度
如左填充原字符串小于指定长度,从右开始截断
select
lpad(str,int,'填充值')
8. rpad
用指定的字符实现右填充指定长度
如右填充原字符小于指定长度,从左开始截断
select
rpad(str,int,'填充值')
9. replace
替换
select
replace(str,from_str,to_str) as 别名;
二、数学函数
1. round
四舍五入
-
X四舍五入到整数
-
X四舍五入到D位数
select
round(X,D);
2. ceil
向上取整
返回大于等于X的最小整数
select
ceil(X);
3. floor
向下取整
返回小于等于X的最大整数
select
floor(X);
4. truncate
截断X保留D位小数
select
truncate(X,D);
5. mod
取余:取X1与X2的余数
select
mod(X1,X2);
等于
select
X1%X2;
X1为正数结果为正数,X1为负数结果为负数
其原因为取余的运算公式为:a-a/bb (其中a/b*的结果取整)
三、日期函数
1.now
返回系统当前日期+时间
select
now();
#返回 yyyy-mm-dd hh:mm:ss
2. curdate
返回当前系统日期,不包含时间
select
curdate();
#返回 yyyy-mm-dd
3. curtime
返回当前系统时间,不包含日期
select
curtime();
#返回 hh:mm:ss
4. 获取指定的部分
a. 年
select
year(date) 年;
b. 月
中文
select
month(date) 月;
英文
select
monthname(date) 月;
c. 日
select
day(date) 日;
d. 时
select
hour(date) 时;
e. 分
select
minute(date) 分;
f. 秒
select
second(date) 秒;
5. str_to_date
将日期格式的字符通过指定的格式转换成日期
select
str_to_date(9-13 1999,'%m-%d %Y')
#out 1993-09-13
6. 格式符对应表
序号 | 格式符 | 功能 |
---|---|---|
1 | %Y | 四位的年份 |
2 | %y | 两位的年份 |
3 | %m | 月份(01,02…11,12) |
4 | %c | 月份(1,2,…11,12) |
5 | %d | 日(01,02,…) |
6 | %H | 小时(24小时制) |
7 | %h | 小时(12小时制) |
8 | %i | 分钟(00,01…59) |
9 | %s | 秒(00,01,…59) |
7. date_format
将日期转换成字符
select
date_format('2019/6/6','%Y年%m月%d日')
#out 2019年06月06日
四、其他函数
1.version
查询当前版本号
select
version();
2.database
查询当前数据库
select
database();
3.user
查询当前用户
select
user();
五、流程控制函数
1. if函数
实现 if else的效果
select
if(expr1,expr2,expr3);
#expr1 代表条件表达式判断True or False
#expr2 如果结果为True返回expr2
#expr3 如果结果为False返回expr3
2. case
case函数的使用一
实现switch case的效果,适用于等值判断
java中
switch(变量或表达式){
case 常量1: 语句1: break;
...
default:语句n;break;
}
mysql中
case 要判断的字段或表达式
case 要判断的字段或表达式
when (常量1 then 要显示的值或语句1;
when (常量2 then 要显示的值或语句2;
...
else 要显示的值n或语句n;
end
case函数的使用二
类似于多重if,适用于区间判断
java中
if(条件1){
语句1:
}else if(条件2){
语句2:
}
...
else{
语句n;
}
mysql中
case
when 条件1 then 要显示的值1或语句1#如果when后面是语句,需要加‘;’
when 条件2 then 要显示的值2或语句2
...
else 要显示的值或语句n
end