JavaWeb后端实战(MySql基础)

文章目录

  • 一、MySql概述
    • 1.1安装
      • [1.1.1 版本](#1.1.1 版本)
      • [1.1.2 连接](#1.1.2 连接)
      • [1.1.3 企业使用方式(了解)](#1.1.3 企业使用方式(了解))
    • [1.2 数据模型](#1.2 数据模型)
      • [1.2.1 关系型数据库](#1.2.1 关系型数据库)
      • [1.2.2 数据模型](#1.2.2 数据模型)
    • [1.2 SQL简介](#1.2 SQL简介)
      • [1.2.1 分类](#1.2.1 分类)
      • [1.2.2 通用语法](#1.2.2 通用语法)
  • 二、SQL语句(DDL、DML、DQL)
    • [2.1 DDL(数据定义语言)](#2.1 DDL(数据定义语言))
      • [2.1.1 创建表的语法](#2.1.1 创建表的语法)
      • [2.1.2 数据类型](#2.1.2 数据类型)
      • [2.1.3 设计表的流程](#2.1.3 设计表的流程)
      • [2.1.4 查询](#2.1.4 查询)
      • [2.1.5 修改](#2.1.5 修改)
    • [2.2 DML(数据操作语言)](#2.2 DML(数据操作语言))
      • [2.2.1 insert(增)](#2.2.1 insert(增))
      • [2.2.2 update(改)](#2.2.2 update(改))
      • [2.2.3 delete(删)](#2.2.3 delete(删))
    • [2.3 DQL(数据查询语言)](#2.3 DQL(数据查询语言))
      • [2.3.1 完整的DQL语句语法](#2.3.1 完整的DQL语句语法)
      • [2.3.2 基本查询](#2.3.2 基本查询)
      • [2.3.3 条件查询](#2.3.3 条件查询)
      • [2.3.4 分组查询](#2.3.4 分组查询)
        • [2.3.4.1 聚合函数](#2.3.4.1 聚合函数)
        • [2.3.4.2 分组查询语法](#2.3.4.2 分组查询语法)
      • [2.3.5 排序查询](#2.3.5 排序查询)
      • [2.3.6 分页查询](#2.3.6 分页查询)

一、MySql概述

1.1安装

1.1.1 版本

MySQL官方提供了两个版本:

商业版(MySQL Enterprise Edition):该版本是收费的,我们可以使用30天,官方会提供对应的技术支持

社区版本(MySQL Community Server):该版本是免费的,但是MySQL不回提供任何技术支持

1.1.2 连接

MySQL服务启动完毕后,然后在使用如下指令来连接MySQL服务器:

java 复制代码
mysql -u用户名 -p密码 [-h数据库服务器的ip地址 -p端口号]

注意:
-h 参数不加,默认连接的是本地127.0.0.1的MySQL服务器
-p 参数不加,默认连接的端口号是3306

上述指令,可以有两种形式:

①密码直接在-p参数后直接指定(这种方式不安全,密码直接以明文形式出现在命令行)

②密码在-p回车之后,在命令行输入密码,然后回车

1.1.3 企业使用方式(了解)

通过MySQL客户端命令行,如何来连接服务器上部署的MySQL

java 复制代码
mysql [-h数据库服务器的ip地址 -p端口号] -u用户名 -p密码

1.2 数据模型

1.2.1 关系型数据库

概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库,所谓的二维表就是由行和列组成的

二维表的优点:
①使用表存储数据,格式统一,便于维护
②使用SQL语言操作,标准统一,使用方便,可用于复杂查询

1.2.2 数据模型

MySQL是关系型数据库,是基于二维表进行数据存储的,具体的结构图如下:

①通过MySQL客户端连接数据库管理系统DBMS,然后通过DBMS操作数据库

②使用MySQL客户端,向数据库管理系统发送一条SQL语句,由数据库管理系统根据SQL语句指令去操作数据库中的表结构及数据

③一个数据库服务器中可以创建多个数据库,一个数据库中也可以包含多张表,而一张表中又可以包含多行记录
在MySQL数据库服务器当中存储数据,你需要:

①先创建数据库(可以创建多个数据库,之间是相互独立的)

②在数据库下再创建数据表(一个数据库下可以创建多张表)

③再将数据存放再数据表中(一张表可以存储多行数据)

1.2 SQL简介

SQL:一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准

1.2.1 分类

1.2.2 通用语法

①SQL语句可以单行或者多行书写,以分号结尾

②SQL语句可以使用空格/缩进来增强语句的可读性

③MySQL数据库的SQL语句不区分大小写

④注释:

Ⅰ单行注释:--注释内容 或 # 注释内容(MySQL特有);

Ⅱ多行注释:/* 注释内容 */

二、SQL语句(DDL、DML、DQL)

2.1 DDL(数据定义语言)

相关语法:

java 复制代码
-- 查询所有数据库
show databases;

-- 查询当前数据库
select database();

-- 使用/切换数据库
use 数据库名;

-- 创建数据库
create database [if exists] 数据库名 [default charset utf8mb4];

-- 删除数据库
drop database [if exists] 数据库名;

-- 数据库不存在,则创建该数据库;如果存在则不创建
create database if not extists 数据库名;

注意:
上述语法中的database,也可以替换成 schema。如create schema db01;MySQL版本中,默认字符集为utf8mb4

2.1.1 创建表的语法

java 复制代码
create table 表名(
	字段1 字段类型 [约束] [comment 字段1注释],
	................................................
	字段2 字段类型 [约束] [comment 字段1注释]
)[comment 标注释];

示例:

java 复制代码
create table tb_user (
 id int comment 'ID,唯一标识', # id是一行数据的唯一标识(不能重复)
 username varchar(20) comment '用户名',
 name varchar(10) comment '姓名',
 age int comment '年龄',
 gender char(1) comment '性别'
) comment '用户表';

约束:约束是作用于标种字段上的规则,用于限制存储在表中的数据

目的:保证数据库的正确性,有效性和完整性

java 复制代码
create table tb_user (
 id int primary key comment 'ID,唯一标识',
 username varchar(20) not null unique comment '用户名',
 name varchar(10) not null comment '姓名',
 age int comment '年龄',
 gender char(1) default '男' comment '性别'
) comment '用户表';
复制代码
主键自增:auto_increment
	每次插入新的行记录时,数据库自动生成id字段(主键)下的值
	具有auto_increment的数据列是一个正数序列开始增长(从1开始自增)

2.1.2 数据类型

MySQL中的数据类型有很多种,主要分为三类:数值型、字符串类型、日期时间类型

①数值类型

示例:

java 复制代码
 年龄字段 ---不会出现负数, 而且人的年龄不会太大
 age tinyint unsigned

 分数 ---总分100分, 最多出现一位小数
 score double(4,1)

问:数值类型在定义的时候,后面加了unsigned关键字是什么意思?

Ⅰunsigned表示无符号类型,表示只能取0及正数

Ⅱ不加默认是signed,表示可以取负数

②字符串类型

注意:

char于varchar都可以描述字符串,char是定长字符串,指定长度多长,就占用多少个字符,和字段的长度无关。而varchar是边长字符串,指定的长度为最大占用长度,相对来说,char的性能会更好一些

示例:

java 复制代码
 用户名 username ---长度不定, 最长不会超过50
 username varchar(50)

 手机号 phone ---固定长度为11
 phone char(11)

③日期时间类型

示例:

java 复制代码
 生日字段 birthday ---生日只需要年月日
 birthday date

 创建时间 createtime --- 需要精确到时分秒
 createtime datetime

2.1.3 设计表的流程

①阅读页面原型及需求文档

②基于页面原型和需求文档,确定原型字段(类型、长度限制、,约束)

③再增加表设计所需要的业务基础字段(id、create_time、update_time)

2.1.4 查询

关于表结构的查询操作,一般都是直接基于图形化界面操作。

java 复制代码
-- 查询当前数据库的所有表
show tables;

-- 查看指定表结构
desc 表名 ; #可以查看指定表的字段、字段的类型、是否可以为NULL、是否存在默认值等信息

-- 查询指定表的建表语句
show create table 表名 ; 

2.1.5 修改

关于表结构的修改操作,一般都是直接基于图形化界面操作。

java 复制代码
-- 添加字段
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
示例:
	alter table tb_emp add qq varchar(11) comment 'QQ号码';
	
-- 修改数据类型
alter table 表名 modify 字段名 新数据类型(长度);
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];
示例:
	alter table tb_emp modify qq varchar(13) comment 'QQ号码';

-- 删除字段
alter table 表名 drop 字段名;
示例:
	alter table tb_emp drop qq_num;

-- 修改表名
rename table 表名 to 新表名;
示例:
	rename table emp to tb_emp;
	
-- 删除表语法
drop table [ if exists ] 表名;
-- if exists :只有表名存在时才会删除该表,表名不存在,则不执行删除操作(如果不加该参数项,删除一张不存在的表,执行将会报错)。
示例:
	drop table if exists tb_emp; -- 在删除表时,表中的全部数据也会被删除。

2.2 DML(数据操作语言)

DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中的记录进行增、删、改操作

2.2.1 insert(增)

java 复制代码
-- 向指定字段添加数据
insert into 表名 (字段名1, 字段名2) values (值1, 值2);

-- 全部字段添加数据
insert into 表名 values (值1, 值2, ...);

-- 批量添加数据(指定字段)
insert into 表名 (字段名1, 字段名2) values (值1, 值2), (值1, 值2);

-- 批量添加数据(全部字段)
insert into 表名 values (值1, 值2, ...), (值1, 值2, ...);

注意:

①插入数据时,指定的字段顺序需要与值的顺序是一一对应的

②字符串和日期数据应该包含在引号中

③插入的数据大小,应该在字段的规定范围内

2.2.2 update(改)

java 复制代码
update 表名 set 字段名1 = 值1 , 字段名2 = 值2 , .... [where 条件] ;
示例:
	update emp set entry_date='2010-01-01', update_time=now();

注意:

①修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据

②在修改数据时,一般需要同时修改公共字段update_time,将其修改为当前操作时间。

2.2.3 delete(删)

java 复制代码
delete from 表名 [where 条件] ;
示例:
	delete from emp where id = 1;

注意:

①DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据

②DELETE语句不能删除某一个字段的值(可以使用UPDATE,将该字段设置为NULL即可)

③当进行删除全部数据操作时,会提示询问是否确认删除所有数据,直接点Execute即可。

2.3 DQL(数据查询语言)

2.3.1 完整的DQL语句语法

java 复制代码
select
	字段列表
from
	表名列表
where
	条件列表
group by
	分组字段列表
having
	分组后条件列表
order by
	排序字段列表
limit
	分页参数

①基本查询(select......from......)

②条件查询(where)

③分组查询(group by)

④排序查询(order by)

⑤分页查询(limit)

2.3.2 基本查询

java 复制代码
-- 查询多个字段
select 字段1, 字段2, 字段3 from 表名;

-- 查询所有字段(通配符)
select * from 表名;

-- 为查询字段设置别名
select 字段1 [as 别名1], 字段2 [as 别名2] from 表名;

-- 去除重复记录
select distinct 字段列表 from 表名;

注意:

"*" 代表拆线呢所有字段,在实际开发中尽力少用(不直观、影响效率)

2.3.3 条件查询

java 复制代码
select 字段列表 from 表名 where 条件列表;


①如何进行null值的判断:is null ; is not null

②模糊匹配中的通配符 %(任意个字符);_(一个字符)

③如何组装多个查询条件:and / or

2.3.4 分组查询

分组:就是按列进行分类(指定列下相同的数据归为一类),然后可以对分类的数据进行合并计算

分组拆线呢通常会使用聚合函数进行计算

2.3.4.1 聚合函数

聚合函数:将一列数据作为一个整体,进行纵向计算

①count :按照列去统计有多少行数据。在根据指定的列统计的时候,如果这一列中有null的行,该行不会被统计在其中。

②sum :计算指定列的数值和,如果不是数值类型,那么计算结果为0

③max :计算指定列的最大值

④min :计算指定列的最小值

⑤avg :计算指定列的平均值
注意:

①null值不参与计算所有的聚合函数

②统计数量可以使用:count(*);count(字段);count(常量);推荐使用count(*)

2.3.4.2 分组查询语法
java 复制代码
-- 条件查询
select 字段列表 from 表名 [where 条件列表] group by 分组字段名 [having 分组后过滤条件];

where与having的区别:
①执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后会结果进行过滤
②判断调价不同:where不能对聚合函数进行判断,而having可以
注意:

①分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义

②执行顺序:where > 聚合函数 > having

2.3.5 排序查询

java 复制代码
select 字段列表 from 表名 [where 条件列表] [group by 分组字段名 having 分组后过滤条件] order by 排序字段 排序方法;

排序方法:升序(asc)降序(desc);默认为升序,是可以不写的
注意:

如果是多字段排序,当地一个字段值相同时,才会根据第二个字段进行排序

2.3.6 分页查询

java 复制代码
select 字段 from 表名 [where 条件] [group by 分组字段 having 过滤条件] [order by 排序字段 排序函数] limit 起始索引, 查询记录数;

说明:

①起始索引从0开始 起始索引 = (查询页码 - 1)* 每页显示记录数

②分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT

③如果查询的是第一页的数据,起始索引可以省略,直接简写为 limit 10

相关推荐
BYSJMG13 分钟前
2026计算机毕设推荐:基于大数据的车辆二氧化碳排放量可视化分析系统
大数据·vue.js·python·mysql·django·课程设计
橘子1319 分钟前
MySQL连接(十四)
数据库·mysql
渡我白衣30 分钟前
【MySQL基础】(2):数据库基础概念
数据库·人工智能·深度学习·神经网络·mysql·机器学习·自然语言处理
怣501 小时前
MySQL WHERE子句完全指南:精准过滤数据的艺术
数据库·mysql
Fleshy数模11 小时前
CentOS7 安装配置 MySQL5.7 完整教程(本地虚拟机学习版)
linux·mysql·centos
az44yao11 小时前
mysql 创建事件 每天17点执行一个存储过程
mysql
秦老师Q13 小时前
php入门教程(超详细,一篇就够了!!!)
开发语言·mysql·php·db
橘子1313 小时前
MySQL用户管理(十三)
数据库·mysql
Dxy123931021613 小时前
MySQL如何加唯一索引
android·数据库·mysql
我真的是大笨蛋14 小时前
深度解析InnoDB如何保障Buffer与磁盘数据一致性
java·数据库·sql·mysql·性能优化