从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 安装与连接
安装步骤
- 官网下载地址:MySQL Community Server 8.0.34
- 选择对应操作系统(如 Windows x64),下载 ZIP 包或安装程序
- 参考官方文档配置环境变量和服务
连接方式
通过命令行连接 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 '用户表'; |
表结构核心要素
- 约束:限制字段数据的规则,保证数据有效性。
约束 | 关键字 | 说明 |
非空约束 | not null | 字段值不能为 null |
唯一约束 | unique | 字段值唯一不重复 |
主键约束 | primary key | 唯一标识一行数据(非空 + 唯一) |
默认约束 | default | 未指定值时使用默认值 |
主键自增 | auto_increment | 主键值自动增长(从 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 开发最佳实践
- 命名规范:
- 数据库 / 表名:小写字母 + 下划线(如user_info)
- 字段名:小写字母 + 下划线(如user_name)
- 注释清晰:通过comment说明表和字段含义
- 性能优化:
- 查询避免使用select *,只查询需要的字段
- 分页查询必用limit,避免一次性加载大量数据
- 频繁查询的字段建议添加索引(后续章节详解)
- 数据安全:
- 禁止直接删除全表数据(delete from 表名),需先备份
- 敏感操作(如删除、修改)添加条件限制(where)
五、总结与展望
数据库是 Java Web 开发的基石,本文涵盖了从基础概念到 SQL 实战的核心知识点,包括:
- 数据库、DBMS、SQL 的关系与作用
- MySQL 的安装、连接与数据模型
- DDL(数据库 / 表结构定义)、DML(数据增删改)、DQL(数据查询)的完整语法与案例
- 约束、数据类型、聚合函数、分组、排序、分页等关键操作
掌握这些知识后,你可以轻松应对大部分数据库开发场景。后续还将学习多表设计与查询、事务、索引等高级主题,进一步提升数据库操作的效率和安全性。
建议结合实际案例练习 SQL 语句,熟练后可尝试搭建完整的 Web 项目,将数据库操作与 Java 后端框架(如 Spring Boot)结合,真正做到学以致用。
如果觉得本文对你有帮助,欢迎收藏、点赞并关注,后续将持续更新 Java Web 开发系列知识点!