当前位置: 首页 > backend >正文

从0开始学习Java+AI知识点总结-17.web基础知识(数据库)

一、数据库基础概念

1.1 为什么需要数据库?

在 Web 开发中,应用程序通常分为Controller(接收请求 / 响应数据)Service(业务逻辑处理)Dao(数据访问) 三层。早期案例中使用文本文件(如user.txt)存储数据,但存在维护困难、操作复杂等问题。在企业开发中,数据库成为数据存储的首选,其优势在于:

  • 结构化存储,数据格式统一
  • 支持高效查询、修改和管理
  • 保证数据的一致性和完整性

1.2 核心概念解析

  • 数据库(DB,DataBase):存储和管理数据的仓库。例如电商网站的商品信息、用户数据等都存储在数据库中。
  • 数据库管理系统(DBMS,DataBase Management System):操作和管理数据库的大型软件(如 MySQL、Oracle)。开发者通过 DBMS 实现对数据库的读写操作。
  • SQL(Structured Query Language):结构化查询语言,是操作关系型数据库的统一标准编程语言。开发者通过 SQL 语句向 DBMS 发送指令,实现数据操作。

三者关系:程序员 → SQL 语句 → DBMS → 数据库 → 数据

1.3 主流数据库介绍

目前主流的关系型数据库排名(2024 年 3 月)如下:

排名

数据库

特点

1

Oracle

大型收费数据库,适合企业级高并发场景

2

MySQL

开源免费的中小型数据库,互联网公司主流选择

3

SQL Server

微软推出的收费中型数据库,常用于 C#/.NET 开发

4

PostgreSQL

开源免费,支持复杂数据类型和扩展

5

SQLite

嵌入式微型数据库,Android 系统内置

重点:MySQL 因开源免费、轻量高效成为互联网开发的首选。掌握 SQL 后可无缝迁移到其他关系型数据库(如 Oracle、SQL Server),因为 SQL 是统一标准。

二、MySQL 概述

2.1 MySQL 版本选择

MySQL 官方提供两个版本:

  • 商业版(MySQL Enterprise Edition):收费,提供 30 天试用和官方技术支持。
  • 社区版(MySQL Community Server):免费,无官方技术支持,适合学习和中小型项目。

推荐使用社区版 8.0.34(本文案例基于此版本)。

2.2 MySQL 安装与连接

安装步骤
  1. 官网下载地址:MySQL Community Server 8.0.34
  2. 选择对应操作系统(如 Windows x64),下载 ZIP 包或安装程序
  3. 参考官方文档配置环境变量和服务
连接方式

通过命令行连接 MySQL 服务器的语法:

mysql -u用户名 -p密码 [-h服务器IP -P端口号]

  • 本地连接默认 IP 为127.0.0.1,端口号3306,可省略:mysql -uroot -p1234
  • 远程连接需指定 IP 和端口:mysql -h192.168.1.100 -P3306 -uroot -p1234

注意:密码直接跟随-p后会明文显示(不安全),建议仅输入-p后回车,再隐式输入密码。

2.3 数据模型

MySQL 是关系型数据库,基于二维表存储数据,其数据结构层次为:

MySQL 服务器 → 数据库 → 表 → 记录(行)→ 字段(列)

  • 一个服务器可创建多个独立数据库
  • 一个数据库可包含多张表
  • 一张表由行(数据记录)和列(字段)组成

例如:员工表(存储员工信息)和部门表(存储部门信息)通过 “部门编号” 关联,形成结构化数据关系。

三、SQL 语句核心操作

SQL 按功能分为四类:DDL(数据定义语言)DML(数据操作语言)DQL(数据查询语言)DQL(数据控制语言)。以下重点讲解前三者。

3.1 DDL:数据定义语言

用于定义数据库对象(数据库、表、字段),核心操作包括创建、查询、修改、删除

3.1.1 数据库操作

操作

语法

说明

查询所有数据库

show databases;

查看服务器中所有数据库

查询当前数据库

select database();

查看当前正在使用的数据库

创建数据库

create database [if not exists] 数据库名 [default charset utf8mb4];

if not exists避免重复创建,MySQL8 默认字符集为 utf8mb4

使用数据库

use 数据库名;

切换到目标数据库才能操作其表

删除数据库

drop database [if exists] 数据库名;

if exists避免删除不存在的数据库报错

3.1.2 表结构操作
创建表

语法:

create table 表名(

  字段1 类型 [约束] [comment 注释],

  字段2 类型 [约束] [comment 注释],

  ...

) [comment 表注释];

示例:创建用户表tb_user

create table tb_user (

  id int primary key auto_increment comment 'ID,唯一标识',

  username varchar(20) not null unique comment '用户名',

  name varchar(10) not null comment '姓名',

  age int comment '年龄',

  gender char(1) default '男' comment '性别'

) comment '用户表';

表结构核心要素
  1. 约束:限制字段数据的规则,保证数据有效性。

约束

关键字

说明

非空约束

not null

字段值不能为 null

唯一约束

unique

字段值唯一不重复

主键约束

primary key

唯一标识一行数据(非空 + 唯一)

默认约束

default

未指定值时使用默认值

主键自增

auto_increment

主键值自动增长(从 1 开始)

  1. 数据类型:MySQL 常用数据类型分为三类:

类型

细分类型

示例场景

数值类型

int(4 字节)、tinyint(1 字节)、double

年龄(tinyint)、薪资(int

字符串类型

char(定长)、varchar(变长)

手机号(char(11))、用户名(varchar(20)

日期时间类型

date(年月日)、datetime(年月日时分秒)

生日(date)、创建时间(datetime

表结构查询与修改

操作

语法

查询所有表

show tables;

查看表结构

desc 表名;

查看建表语句

show create table 表名;

添加字段

alter table 表名 add 字段名 类型 [约束];

修改字段类型

alter table 表名 modify 字段名 新类型;

修改字段名

alter table 表名 change 旧字段名 新字段名 类型;

删除字段

alter table 表名 drop 字段名;

修改表名

rename table 表名 to 新表名;

删除表

drop table [if exists] 表名;

3.2 DML:数据操作语言

用于对表中数据进行增、删、改操作。

3.2.1 添加数据(INSERT)

语法:

-- 指定字段添加

insert into 表名(字段1, 字段2) values (值1, 值2);

-- 全部字段添加(需按字段顺序)

insert into 表名 values (值1, 值2, ...);

-- 批量添加

insert into 表名(字段1, 字段2) values (值1, 值2), (值1, 值2);

示例:向tb_user添加数据

insert into tb_user(username, name, age, gender)

values ('zhangsan', '张三', 20, '男'),

       ('lisi', '李四', 22, '女');

注意:字符串和日期需用单引号包裹,字段顺序与值顺序必须一致。

3.2.2 修改数据(UPDATE)

语法:

update 表名 set 字段1=值1, 字段2=值2 [where 条件];

示例:

-- 修改id=1的用户年龄为21

update tb_user set age=21 where id=1;

-- 批量修改所有用户性别为'男'(谨慎使用,无where则修改全表)

update tb_user set gender='男';

最佳实践:修改数据时需同步更新update_time字段(记录最后修改时间):

update tb_user set age=21, update_time=now() where id=1;

3.2.3 删除数据(DELETE)

语法:

delete from 表名 [where 条件];

示例:

-- 删除id=2的用户

delete from tb_user where id=2;

-- 删除所有数据(谨慎使用)

delete from tb_user;

注意delete删除的是数据,表结构保留;若需清空表并重置自增主键,可用truncate table 表名;(无法恢复,慎用)。

3.3 DQL:数据查询语言

用于查询表中的数据,是 SQL 中最常用、最复杂的操作。完整语法:

select 字段列表

from 表名

where 条件列表

group by 分组字段

having 分组后条件

order by 排序字段

limit 分页参数;

3.3.1 基本查询

操作

语法示例

说明

查询指定字段

select name, age from tb_user;

只返回 name 和 age 字段

查询所有字段

select * from tb_user;

不推荐(低效、不直观)

别名查询

select name as 姓名, age 年龄 from tb_user;

as可省略

去重查询

select distinct gender from tb_user;

去除重复的 gender 值

3.3.2 条件查询(WHERE)

通过比较运算符逻辑运算符筛选数据。

常用比较运算符:

  • >>=<<==(等于)、!=/<>(不等于)
  • between ... and ...:在指定范围(含边界)
  • in(...):在列表中匹配任意值
  • like:模糊匹配(%匹配任意字符,_匹配单个字符)
  • is null/is not null:判断是否为 null

常用逻辑运算符:

  • and/&&:同时成立
  • or/||:任意成立
  • not/!:取反

示例:

-- 查询年龄>18且性别为女的用户

select * from tb_user where age>18 and gender='女';

-- 查询年龄在18-30之间的用户

select * from tb_user where age between 18 and 30;

-- 查询姓名含'张'的用户

select * from tb_user where name like '张%';

-- 查询职位不为null的用户

select * from tb_user where job is not null;

3.3.3 聚合函数

对一列数据进行纵向计算,常用函数:

函数

功能

示例

count

统计数量

select count(*) from tb_user;(统计总记录数)

max

求最大值

select max(age) from tb_user;(最大年龄)

min

求最小值

select min(age) from tb_user;(最小年龄)

avg

求平均值

select avg(age) from tb_user;(平均年龄)

sum

求和

select sum(salary) from tb_user;(薪资总和)

注意:聚合函数忽略 null 值,count(*)统计所有行(包括 null),效率最高。

3.3.4 分组查询(GROUP BY)

按字段分组后进行聚合计算,语法:

select 分组字段, 聚合函数 from 表名 [where 条件] group by 分组字段 [having 分组后条件];

示例:

-- 按性别分组,统计每组人数

select gender, count(*) from tb_user group by gender;

-- 先筛选年龄>18,再按性别分组,统计人数>2的组

select gender, count(*) from tb_user where age>18 group by gender having count(*)>2;

where vs having

  • where:分组前过滤,不能使用聚合函数
  • having:分组后过滤,可使用聚合函数
3.3.5 排序查询(ORDER BY)

按字段排序,语法:

select 字段列表 from 表名 order by 字段1 排序方式1, 字段2 排序方式2;

  • 排序方式:asc(升序,默认)、desc(降序)

示例:

-- 按年龄升序排序(默认asc)

select * from tb_user order by age;

-- 按年龄降序,年龄相同则按姓名升序

select * from tb_user order by age desc, name asc;

3.3.6 分页查询(LIMIT)

用于分页展示数据,语法:

select 字段列表 from 表名 limit 起始索引, 每页记录数;

  • 起始索引 = (页码 - 1)× 每页记录数
  • 第一页可简写:limit 每页记录数

示例:

-- 第1页,每页5条(起始索引0)

select * from tb_user limit 0, 5;

-- 第2页,每页5条(起始索引5)

select * from tb_user limit 5, 5;

四、实用工具与最佳实践

4.1 图形化工具推荐

命令行操作 SQL 效率低,推荐使用图形化工具:

  • DataGrip:JetBrains 旗下工具,支持多数据库,集成于 IDEA
  • Navicat:功能全面,界面友好,支持 Windows/macOS
  • SQLyog:轻量级 MySQL 专用工具,操作简洁

4.2 开发最佳实践

  1. 命名规范
    • 数据库 / 表名:小写字母 + 下划线(如user_info
    • 字段名:小写字母 + 下划线(如user_name
    • 注释清晰:通过comment说明表和字段含义
  1. 性能优化
    • 查询避免使用select *,只查询需要的字段
    • 分页查询必用limit,避免一次性加载大量数据
    • 频繁查询的字段建议添加索引(后续章节详解)
  1. 数据安全
    • 禁止直接删除全表数据(delete from 表名),需先备份
    • 敏感操作(如删除、修改)添加条件限制(where

五、总结与展望

数据库是 Java Web 开发的基石,本文涵盖了从基础概念到 SQL 实战的核心知识点,包括:

  • 数据库、DBMS、SQL 的关系与作用
  • MySQL 的安装、连接与数据模型
  • DDL(数据库 / 表结构定义)、DML(数据增删改)、DQL(数据查询)的完整语法与案例
  • 约束、数据类型、聚合函数、分组、排序、分页等关键操作

掌握这些知识后,你可以轻松应对大部分数据库开发场景。后续还将学习多表设计与查询事务索引等高级主题,进一步提升数据库操作的效率和安全性。

建议结合实际案例练习 SQL 语句,熟练后可尝试搭建完整的 Web 项目,将数据库操作与 Java 后端框架(如 Spring Boot)结合,真正做到学以致用。

如果觉得本文对你有帮助,欢迎收藏、点赞并关注,后续将持续更新 Java Web 开发系列知识点!

http://www.xdnf.cn/news/18026.html

相关文章:

  • ARM汇编代码新手入门
  • 【人工智能99问】残差链接是什么,是如何起作用的?(28/99)
  • C语言相关简单数据结构:双向链表
  • 影刀 RAP 迁移华为云备忘录数据到得到笔记
  • C++编程实战:高效解决算法与数据结构问题
  • Python多线程、锁、多进程、异步编程
  • 自动驾驶中的传感器技术34——Lidar(9)
  • Python训练营打卡Day35-复习日
  • 2025年5月架构设计师综合知识真题回顾,附参考答案、解析及所涉知识点(五)
  • Pandas 和 NumPy的区别和联系
  • 安卓开发中遇到Medium Phone API 36.0 is already running as process XXX.
  • RK3568平台开发系列讲解:PCIE trainning失败怎么办
  • 计算机网络 OSI 七层模型和 TCP 五层模型
  • day43_2025-08-17
  • git stash临时保存工作区
  • Talk2BEV论文速读
  • Next.js跟React关系(Next.js是基于React库的全栈框架)(文件系统路由、服务端渲染SSR、静态生成SSG、增量静态再生ISR、API路由)
  • 【Python】-- 机器学习项目 - 基于KNN算法的鸢尾花分类
  • 基于飞算JavaAI实现布隆过滤器防止缓存穿透:原理、实践与全流程解析
  • HTTP0.9/1.0/1.1/2.0
  • 免费照片压缩网站
  • Android原生(Kotlin)与Flutter混合开发 - 设备控制与状态同步解决方案
  • Visual Studio Code 基础设置指南
  • C++ 特殊类设计与单例模式解析
  • 云计算-K8s 实战:Pod、安全上下文、HPA 、CRD、网络策略、亲和性等功能配置实操指南
  • 天地图开发的优点
  • Leaflet赋能:WebGIS视角下的省域区县天气可视化实战攻略
  • PostgreSQL——用户管理
  • Dify 从入门到精通(第 38/100 篇):Dify 的实时协作功能
  • PIDGen!DecodeProdKey函数分析之四个断点