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

相关推荐
-雷阵雨-4 小时前
MySQL——数据库操作攻略
数据库·mysql
Wadli4 小时前
csdn| MySQL
数据库·mysql
程序员水自流4 小时前
MySQL InnoDB存储引擎关键核心特性详细介绍
java·数据库·mysql
-雷阵雨-4 小时前
MySQL——表的操作
数据库·mysql
想睡hhh5 小时前
mysql表的操作——mysql表的约束
数据库·mysql
m0”-“0m5 小时前
MySQL、Nignx和Docker在Linux上的安装详解
linux·数据库·mysql
武子康7 小时前
Java-145 深入浅出 MongoDB 基本操作详解:数据库查看、切换、创建集合与删除完整教程
java·数据库·sql·mysql·mongodb·性能优化·系统架构
刘大猫.7 小时前
mysql数据库压缩
数据库·mysql·压缩·mysql数据库压缩·数据库压缩·数据库备份与压缩
会飞的架狗师7 小时前
【MySQL体系】第4篇:MySQL 查询优化实用技巧
数据库·mysql