从零开始学习MySQL数据库

MySQL数据库


前言

本篇为本人从零开始学习数据库的日常记录,不定时更新,本人并非互联网行业的从业人员,所处行业常年游离在数字化的边缘,近年来随着互联网的高速发展,大量企业被迫转型,而在转型初期,基于未标准化的各种数据所开发的软件,其开发、迭代都十分耗费人力,故需先行标准化数据库,所以我开始学习MySQL,在网络和书中学习后对知识点进行整理产生了本篇,整理后希望本篇能在温故知新之余,也能帮助到后人。


目录

一、MySQL数据库的下载

  1. 下载地址:https://dev.mysql.com/downloads/
  2. 选择MySQL Installer for Windows:由于windows比较常用,所以用windows进行学习,降低准入门槛
  3. 本人使用版本: MySQL Ver 8.0.26 for Win64 on X86_64
  4. 下载

二、数据库的安装

  1. 退出系统中目前正在运行的所有软件
  2. 打开mysql.msi
  3. 接受协议,下一步
  4. 选择自定义安装,下一步
  5. 找到mysql组件,添加至右边,更改路径,建议只改盘符,下一步
  6. 安装成功

三、数据库的配置

  1. 自动弹出配置程序
  2. 如未弹出,或配置错误,可以打开安装路径–>bin目录下MySQLInstanceConfig.exe进行配置
  3. 选择精确配置,下一步
  4. 选择开发机,该选项影响占用内存,下一步
  5. 选择多功能数据库,影响存储引擎速度,下一步
  6. 选择并发数量,建议20,下一步
  7. 选择端口号,默认为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. 查询列表可以是:表中的字段、常量值、表达式、函数
  2. 查询的结果是一个虚拟的表格
1. 查询表中的单个字段
select 查询列表 from 表名;
2. 查询表中的多个字段
select 查询列表1,列表2,列表3 from 表名;
3. 查询表中的所有字段
select * from 表名;(有序列表)
4. 查询常量值
select 100;
5.查询表达式
select 100*98;
6. 查询函数
select version();
7. 起别名

特点:

  1. 便于理解
  2. 如果要查询的字段有重名的情况,使用别名可以区分开来
  3. 当AS后面涉及DQL关键字,使用双引号标注

方式一:使用AS

select 100*98 as 结果;
select last_name as,first_name asfrom 表名;

方式二:使用空格

select last_name 姓,first_name 名 from 表名;
8. 去重

案例:查询表中涉及到所有的部门编号

select distinct department_id from 表名;
9. +号的作用

两个操作数都为数值型,则做加法运算

select 100+90; 

其中一方为字符型,试图将字符型数值转换成数值型,如果转换成功,则继续加法运算

select123+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

特点:

  1. 一般和通配符搭配使用
通配符
  • %:任意多个字符(包含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;

③ 排序查询

作用

对查询的结果进行排序

特点
  1. asc代表的是升序,desc代表的是降序
  2. 如果不写排序方式,默认是升序
  3. order by子句中可以支持单个字段、多个字段、表达式、函数、别名
  4. order by子句一般是放在查询语句的最后面,limit子句除外
select
	查询列表
from
	表名;
	[where 筛选条件]
	order by 排序列表1 [asc|desc],排序列表2 [asc|desc];

④ 常见函数

概念

类似于java的方法,将一组逻辑封装在方法体中,对外暴露方法名

好处
  1. 隐藏了实现细节
  2. 提高代码的重用性
调用
select
	函数名(实参列表)
from;
特点
  1. 叫什么(函数名)
  2. 干什么(函数功能)
分类
  1. 单行函数:concat、length、ifnull等
  2. 分组函数,功能:做统计使用,又称为统计函数、聚合函数、组函数

一、字符函数

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

四舍五入

  1. X四舍五入到整数

  2. 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

六、DML–Data Manipulation Language语言的学习


七、DDL–Data Define Language语言的学习


八、TCL–Transaction Conctol Language语言的学习

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值