[ MySQL 数据库 ] 环境安装配置和使用

目录

[一. 数据库(DataBase)](#一. 数据库(DataBase))

1.定义:

[2. 常见的数据库产品:](#2. 常见的数据库产品:)

[3. MySQL数据库](#3. MySQL数据库)

[(1). 介绍 :](#(1). 介绍 :)

[(2). cmd命令行方式连接 MySQL](#(2). cmd命令行方式连接 MySQL)

[(3). MySQL的常用命令](#(3). MySQL的常用命令)

[二. MySQL数据库 环境安装及配置](#二. MySQL数据库 环境安装及配置)

[三. SQL](#三. SQL)

[1.定义 :](#1.定义 :)

[2. DDL](#2. DDL)

(1)数据库

(2)数据表

[1. 字段(列)和记录(行)](#1. 字段(列)和记录(行))

[2. 表特征](#2. 表特征)

[3. 数据类型](#3. 数据类型)

[4. 创建 删除 修改 表数据](#4. 创建 删除 修改 表数据)

[5. 约束和其他](#5. 约束和其他)

3.DML

[4. DQL](#4. DQL)

[(1). 基础查询](#(1). 基础查询)

[(2). 函数处理](#(2). 函数处理)

1.单行函数:

[a. 字符函数](#a. 字符函数)

[b. 逻辑处理](#b. 逻辑处理)

[c. 数学函数](#c. 数学函数)

[d. 日期函数](#d. 日期函数)

2.分组函数:

[(3). 条件查询](#(3). 条件查询)

[(4). 查询合并](#(4). 查询合并)

[(5). 查询排序](#(5). 查询排序)

[(6). 数量限制](#(6). 数量限制)


在程序开发时,为了解决数据存储问题,我们使用专业的数据存储软件(数据库软件)进行存储,

数据库软件专门提供了一种编程语言 来管理数据库中的数据

一. 数据库(DataBase)

1.定义:

为了方便数据的存储和管理,将数据按照特定的规则存储在磁盘上,是一个存储和管理数据的仓库

2. 常见的数据库产品:

3. MySQL数据库

(1). 介绍 :

MySQL是一个关系型数据库管理系统**,由瑞典MySQL AB公司开发 , 现被 Oracle公司收购 MySQL数据库服务器具有快速 可靠** 和易于使用 的特点 且 使用标准的sql语言 , 并且支持多种操作系统,支持多种语言连接. 具有商业版(收费 受维护)与社区版(免费 不受维护)

(2). cmd命令行方式连接 MySQL

登录:mysql [-h127.0.0.1 -P3306](本机可省略) -uroot -p密码

-h:主机名 -P:端口号 -u:用户名 -p:密码 退出:exit

(3). MySQL的常用命令

查看当前所有的数据库:show databases;

选择指定的库:use 库名

查看当前的所有表:show tables;

查看其他库的所有表:show tables from 库名;

查看mysql版本: select version()

二. MySQL数据库 环境安装及配置

1. 下载数据库地址

https://dev.mysql.com/downloads/mysql/

2. 下载到指定目录

一般下载到 development

3. 配置环境变量

复制mysql安装包下的bin目录地址( D:\development\mysql-8.0.22-winx64\bin )

此电脑右击---属性---高级系统设置---环境变量---Path---编辑---新建---粘贴bin目录地址---确定

4. 初始化MySQL

在管理员命令提示符中输入

mysqld --initialize-insecure

5. 安装MySQL服务

cmd输入指令:

mysqld install

6. 启动MySQL服务

cmd输入指令:

net start mysql

7. 为root账号设置密码

cmd输入指令:

mysql -uroot -p

注意 : 初次设置 默认密码为空 , 直接回车就行

cmd输入指令:

alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

注意 : (1) 此处设置的密码为 root, 可以自愿更改

(2) 由于在cmd命令行中进行数据库编写不方便,我们可以安装可视化的客户端工具

(以SQLyog为例,详细的下载流程可以参考其他大佬的博客)

(3) 如果下载时出现问题,有可能是因为电脑系统中缺少东西,需要下载下面软件 (自行下载)

(4)如果启动时出现问题,可能是由于MySQL没有启动 按照下列方式启动

三. SQL

1.定义 :

结构化查询语言SQL(Structured Query Language) , 是一种数据库程序设计语言,用于存取 数据以及查询更新管理 关系数据库系统. 几乎所有关系型数据库都支持SQL , 简单易学,灵活使用可以进行复杂和高级的数据库操作

2. DDL

数据(结构)定义语言DDL(Data Definition Language) : 用于创建修改数据库表结构的语言

常用的语句:create , alter , drop , rename

(1)数据库

创建数据库并设置编码格式

CREATE DATABASE [if not exists] 数据库名 [ CHARSET utf8]

删除数据库

DROP DATABASE 数据库名 / [IF EXISTS数据库名];

修改字符集

ALTER DATABASE 数据库名 CHARSETgbk;

sql 复制代码
-- 创建数据库
create database if not exists schooldb charset utf8
-- 删除数据库
drop database schooldb
-- 修改数据库字符编码
alter database schooldb charset utf8
-- 注意:MySQL数据库名字创建后不支持修改
(2)数据表

表(table) : 构成关系型数据库的基本元素 , 是由行和列组成 .

1. 字段(列)和记录(行)

字段 : 是表里的一列(column),用于保存每条记录的特定信息。

例如 : 学生表的字段包括 学号, 姓名, 性别, 生日 , 电话 , 身高, 注册时间等

记录 : 是表里的一行(row)数据

2. 表特征

表名 ----表中的字段(列)----字段的数据类型和长度 ----约束

3. 数据类型
4. 创建 删除 修改 表数据
sql 复制代码
-- 创建数据表student(表名)
create table student(
num int,
name varchar(8),
gender char(1),
phone char(11),
birthday date,
height decimal(3,2),
regtime datetime
)

-- 删除数据表
drop table student

-- 修改数据表名
rename table student to stu
5. 约束和其他

约束: 主键约束----唯一约束----非空约束----检查约束----外键约束

主键约束: primary key 一个表中只能有一个主键约束 , 不能为空 , 不能重复

唯一约束: unique

非空约束: not null

检查约束: 值需要满足设置的条件

外键约束:

其他:

默认值: default'男'

字段注释: comment'学号'

自动增长: auto_increment (只有整数类型可以自动增长)

sql 复制代码
-- 创建添加约束的表
create table student(
id int primary key auto_increment ,
num int comment'学号',
name varchar(8) not null,
gender char(1) default'男',
phone char(11) unique not null,
birthday date,
height decimal(3,2) check(height<2.55),
regtime datetime not null
)

3.DML

数据操纵语言DML(Data Manipulation Language) 常用语句: insert , delete , update

sql 复制代码
-- DML 数据操纵语言

-- insert
-- 方式1: INSERT INTO 表名(列1,列2......,列n) VALUES(值1,值2.....,值n);
INSERT INTO student(num,NAME,gender,phone,birthday,height,regtime)
             VALUE(100,'张三',"男",'152222222','2005-03-05',1.88,NOW())
-- 方式2: INSERT INTO 表名 set 列名1=值1,..列名n=值n;       
INSERT INTO student SET num=101,NAME='李四',gender='女',phone='1522222223',regtime=NOW()  
-- 方式3(批量插入): INSERT INTO 表名(列1,列2......,列n) VALUES(值1,值2.....,值n),(值1,值2.....,值n);
INSERT INTO student(num,NAME,phone,regtime)
	        VALUES(102,'jim','11111',NOW()),
		          (103,'tom','222',NOW()),
		          (104,'jery','3333',NOW())
    
-- delete 
DELETE FROM student WHERE id = 8
DELETE FROM student 
 
-- update
UPDATE student SET birthday='2008-8-8',height=1.89  -- 这是没有条件的修改,没有条件会修改表中所有数据
UPDATE student SET birthday='2008-9-8',height=1.79  WHERE id=8 -- 这是有条件的修改 

4. DQL

DQL(Data Query Language)数据查询 语言 , 可以从单个表 中查询数据,也可以从多个表中查询

注意: 查询语句是不会影响数据库中的数据的,查询的结果是临时备份

基本语法结构 : selet 要查询的列 from 表名 where 条件 排序 分组 数量限制...

(1). 基础查询

查询指定列 所有列 和 设置别名---as

sql 复制代码
-- 基础查询
SELECT num,NAME,gender FROM  student
-- 条件查询
SELECT num,NAME,gender FROM  student WHERE gender = '男'
-- 查询所有列的数据
SELECT * FROM student WHERE gender = '男'
sql 复制代码
-- as 别名
SELECT num,NAME AS na FROM student
(2). 函数处理
1.单行函数:

函数会对每行查询的数据进行处理 (注意: sql **+ - * /**只能用作算术运算)

a. 字符函数
sql 复制代码
-- 字符函数

-- length(列名) 返回字节长度,一个中文占3个字节,英文字符一个占一个字节
-- CHAR_LENGTH(列名) 返回字符长度
SELECT NAME,LENGTH(NAME)AS nl,CHAR_LENGTH(NAME)AS nll FROM student

-- concat(....)  连接多个字符串
SELECT CONCAT(num,':',NAME)AS NAME FROM student

-- UPPER(NAME)转大写 , LOWER(NAME)转小写
SELECT UPPER(NAME),LOWER(NAME) FROM student

-- substring(列,开始的位置,截取长度)   注意开始的位置从1开始
 SELECT SUBSTRING(NAME,1,1)  FROM student

-- trim(列) 默认是取出前后的空格
SELECT NAME,CHAR_LENGTH(TRIM(NAME)) FROM student 

-- TRIM('#' FROM NAME) 去掉前后指定的子串
SELECT TRIM('#' FROM NAME)FROM student 

-- replace(列,old,new)
SELECT REPLACE(NAME,'i','I')FROM student 
b. 逻辑处理

case when 条件then 条件成立执行 else 条件不成立 end (注意:可以有多个when)

sql 复制代码
-- 逻辑处理
-- case when 条件 then 条件成立执行 else 条件不成立 end  (注意:可以有多个when)
SELECT  num,NAME,
        (CASE WHEN height>=1.80 THEN '高个子' ELSE '非高个子' END)AS height
        FROM student

SELECT  num,NAME,
        (CASE WHEN height>=1.80 THEN '高个子'
              WHEN height>=1.60 THEN '正常' ELSE '低个子' END)AS height
        FROM student
        
-- ifnull(列,'默认值') 检测指定列的值是否为空,如果为空显示默认值
SELECT num,NAME,IFNULL(birthday,'暂未录入信息')AS birthday FROM student

-- if(条件,结果1,结果2)
SELECT num,NAME,IF(height>=1.80,'高个子','非高个子')AS height FROM student
c. 数学函数

round(数值):四舍五入 返回整数

ceil(数值):向上取整,返回>=该参数的最小整数

floor(数值):向下取整,返回<=该参数的最大整数

truncate(数值,保留小数的位数):截断,小数点后截断到几位 ,不会进行四舍五入

mod(被除数,除数):取余,被除数为正,则为正;被除数为负,则为负

sql 复制代码
-- 数学函数
SELECT  num,NAME,ROUND(height),TRUNCATE(height,1) FROM student
d. 日期函数

now(): 返回当前系统时间(年月日时分秒)

curdate(): 返回当前系统日期(年月日)

date_format(日期列,格式): 将日期转换为指定格式

datediff(big,small): 返回两个日期相差的天数

sql 复制代码
-- now():返回当前系统时间(年月日时分秒)
-- curdate():返回当前系统日期(年月日)
SELECT num,NAME,NOW(),CURDATE() FROM student

-- date_format(日期列,格式):将日期转换为指定格式
SELECT num,NAME,DATE_FORMAT(birthday,'%Y') FROM student 
SELECT num,NAME FROM student WHERE DATE_FORMAT(birthday,'%Y-%m') = '2005-03'

-- datediff(big,small):返回两个日期相差的天数
SELECT num,NAME,DATEDIFF(CURDATE(),birthday) FROM student
select datediff(curdate(),'2025-03-20') from student

日期格式:

2.分组函数:

用作统计使用,又称为聚合函数或统计函数 .

多行查询完之后,变为一行结果 . 分组函数一般和**group by语句组合使用 ,**分组统计

常用函数 : sum() avg() max() min() count()

sql 复制代码
-- sum(列,只能对数值类型求和)
SELECT SUM(height) FROM student

-- avg(列) 求平均值
SELECT AVG(height) FROM student

-- max(列) 返回该列中最大值  min(列) 返回该列最小值
SELECT MAX(height),MIN(height) FROM student

-- count(列) 统计该列总数  值如果为null,不计算
SELECT COUNT(birthday) FROM student

-- 如果统计所有的数据,一般用主键列, *
SELECT COUNT(*) FROM student
SELECT COUNT(id) FROM student
sql 复制代码
 -- 查询出学生中身高最高的学信息
SELECT num,NAME FROM student WHERE height = (SELECT MAX(height) FROM student)
 
 -- 查询身高大于平均身高的学生
SELECT num,NAME FROM student WHERE height > (SELECT AVG(height) FROM student)
(3). 条件查询

1.定义: 使用where,将不满足条件的行过滤掉 结构 : select <结果 > from < 表名 > where < 条件 >
2.常用方法:

a. 比较 : = , != , > , < , >= , <= (between and 两者之间,包含临界值)

b. 逻辑运算 : and与----or或----- not非

sql 复制代码
-- and 并且  与
SELECT *  FROM student WHERE gender = '男' AND height>=1.80 
-- or 或
SELECT *  FROM student WHERE gender = '男' OR height>=1.80
SELECT * FROM student WHERE num=101 OR num =103 OR num = 105 

SELECT * FROM student WHERE height>=1.70 AND height <=2.0
SELECT * FROM student WHERE height>1.70 AND height <2.0

-- 在两个值之间, 包含边界值
SELECT * FROM student WHERE  height BETWEEN 1.70 AND 2.0

c.模糊查询

模糊查询 like '张%' 以张开头,向右匹配任意位字符

sql 复制代码
-- 模糊查询  like '张%' 以张开头,向右匹配任意位字符
SELECT * FROM student WHERE NAME LIKE '张%'
SELECT * FROM student WHERE NAME LIKE '%丰%'

in 判断某字段的值是否属于in列表中的某一项

not in判断某字段的值是否不属于in列表中的某一项

IS NULL(为空的)

IS NOT NULL(不为空的)

sql 复制代码
-- in 在给定的数据集中的
SELECT * FROM student WHERE num IN(101,103,105)
SELECT * FROM student WHERE num=101 OR num =103 OR num = 105 

-- not in 不在给定的数据集中的
SELECT * FROM student WHERE num NOT IN(101,103,105)

-- is null 为空的
SELECT * FROM student WHERE birthday IS NULL

-- is not null 不为空的
SELECT * FROM student WHERE birthday IS NOT NULL
(4). 查询合并

UNION ,UNION ALL 合并多个查询的结果, 合并时,多条sql列的数量和类型需要一致

sql 复制代码
-- union 合并时,可以去除多条语句查询出的重复数据
SELECT num,NAME,gender FROM student 
 UNION
SELECT num,NAME,height FROM student WHERE gender = '女'

-- UNION ALL 只是简单的合并,不能去除重复数据
SELECT num,NAME,gender FROM student  
 UNION ALL
SELECT num,NAME,gender FROM student WHERE gender = '女'
(5). 查询排序

order by 列名 asc(升序) / desc(降序)

sql 复制代码
-- 排序 order by 列名 asc(升序)/desc(降序)
SELECT * FROM student WHERE num>1 ORDER BY height ASC

SELECT * FROM student ORDER BY height ASC

SELECT * FROM student ORDER BY regtime DESC

SELECT * FROM student ORDER BY height DESC,regtime ASC
(6). 数量限制
sql 复制代码
-- 数量限制  limit  开始的位置,每次查询的数量  
SELECT * FROM student WHERE num>1 ORDER BY id ASC LIMIT 0,2  -- 第一页

SELECT * FROM student WHERE num>1  LIMIT 2,2  -- 第二页

SELECT * FROM student  LIMIT 4,2  -- 第三页

-- mysql分页公式   limit  (n-1)*每页大小,每页大小

(7)分组查询

group by 分组的列 , 用哪个列作为分组条件, 会把该列中相同的数据分到一组处理

where 是对原始表中的数据进行筛选 , 而 HAVING 是对分组后的结果进行筛选

sql 复制代码
-- 分组查询
-- 统计男女人数 统计出男生各有多少人
-- group by 分组的列 , 用哪个列作为分组条件, 会把该列中相同的数据分到一组处理
  SELECT  gender,COUNT(*) FROM student WHERE num>1  GROUP BY gender

-- 统计姓名重复的学生  只显示重复的数据
   -- where 是对原始表中的数据进行筛选
   -- HAVING 是对分组后的结果进行筛选  
   
   SELECT NAME,COUNT(*)AS c FROM student WHERE num>1 GROUP BY NAME HAVING c>1
   
   SELECT NAME,COUNT(*)AS c FROM student WHERE num>1 GROUP BY NAME HAVING c=1