文章目录
- 一、数据库基础:理解数据管理的核心工具
-
- [1.1 为什么需要数据库?文件存储的局限性](#1.1 为什么需要数据库?文件存储的局限性)
- [1.2 数据库分类:关系型与非关系型的核心区别](#1.2 数据库分类:关系型与非关系型的核心区别)
- 二、MySQL基础操作:数据库与表的核心命令
-
- [2.1 数据库操作:4个核心命令](#2.1 数据库操作:4个核心命令)
-
- [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.2 常用数据类型:选择合适的"容器"](#2.2 常用数据类型:选择合适的“容器”)
-
- [2.2.1 数值类型(存数字)](#2.2.1 数值类型(存数字))
- [2.2.2 字符串类型(存文本)](#2.2.2 字符串类型(存文本))
- [2.2.3 日期类型(存时间)](#2.2.3 日期类型(存时间))
- [2.3 表操作:5个核心命令](#2.3 表操作:5个核心命令)
-
- [2.3.1 查看表结构](#2.3.1 查看表结构)
- [2.3.2 创建表](#2.3.2 创建表)
- [2.3.3 查看数据库中的表](#2.3.3 查看数据库中的表)
- [2.3.4 删除表](#2.3.4 删除表)
- [2.4 实战案例:创建商店数据库](#2.4 实战案例:创建商店数据库)
- 三、SQL分类:理解命令的"身份"
在数据驱动的时代,数据库是存储和管理数据的核心工具。MySQL作为开源且功能强大的关系型数据库,被广泛应用于各类项目。
一、数据库基础:理解数据管理的核心工具
在学习MySQL之前,我们首先要明确"为什么需要数据库"以及"数据库有哪些类型",这是后续操作的理论基础。
1.1 为什么需要数据库?文件存储的局限性
很多人会疑惑:"用文件就能存数据,为什么还要数据库?"其实文件存储存在4个关键问题,而数据库恰好能解决这些痛点:
- 安全性差:文件可直接被修改或删除,缺乏权限控制和数据保护机制;
- 查询管理难:若要从大量文件中筛选特定数据(如"查询2023年所有订单"),需手动编写复杂逻辑,效率极低;
- 海量数据支撑弱:文件系统难以高效存储和读取百万级、千万级数据;
- 程序控制不便:在代码中操作文件需处理IO流、格式解析等问题,且不支持多程序并发访问。
数据库本质是"更高效管理数据的软件",不仅能解决上述问题,还支持远程连接(因此也叫"数据库服务器"),存储介质可灵活选择磁盘(持久化)或内存(临时缓存)。
1.2 数据库分类:关系型与非关系型的核心区别
数据库主要分为关系型数据库(RDBMS) 和非关系型数据库(NoSQL),二者适用场景差异极大,需根据业务需求选择:
对比维度 | 关系型数据库 | 非关系型数据库 |
---|---|---|
是否支持SQL | 是(基于标准SQL,仅实现细节有差异) | 不强制,多数不基于SQL |
事务支持 | 支持(ACID特性,确保数据一致性) | 不支持(适合对一致性要求低的场景) |
复杂操作 | 支持(如多表关联、子查询) | 不支持(仅适合简单数据操作) |
海量读写效率 | 低(结构固定,读写需解析表关系) | 高(灵活存储,专为高并发设计) |
基本结构 | 基于二维表(行+列),结构固定 | 灵活(键值对、文档、图等) |
适用场景 | 业务系统(如电商订单、OA系统,OLTP联机事务处理) | 数据缓存、统计分析(如用户行为分析,OLAP联机分析处理) |
MySQL是一个关系型数据库,简单来说,关系型数据库就是二位表格以及他们之间的联系组成的数据组织。
主流数据库举例
- 关系型 :
- Oracle:收费,适合大型复杂项目(如ERP系统);
- MySQL:开源免费,轻量易用,适合中小型项目(重点);
- SQL Server:微软产品,需部署在Windows Server,中大型项目常用。
- 非关系型 :
- 键值对:Redis(缓存常用)、Memcached;
- 文档型:MongoDB(存储JSON格式数据);
- 列族:HBase(大数据场景);
- 图型:Neo4j(社交网络关系分析)。
二、MySQL基础操作:数据库与表的核心命令
掌握 "数据库创建/删除""表创建/删除" 是MySQL实战的第一步,以下命令需在MySQL命令行(mysql -u root -p
登录后)执行。
2.1 数据库操作:4个核心命令
2.1.1 显示所有数据库
查看当前MySQL中已存在的数据库:
sql
SHOW DATABASES;

执行后会显示系统默认数据库 和自定义数据库。系统默认数据库记录关于MySQL自身的配置,性能,系统变量信息
2.1.2 创建数据库
语法:
sql
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARACTER SET 字符集] [DEFAULT COLLATE 校验规则];
IF NOT EXISTS
:可选,避免"数据库已存在"报错;CHARACTER SET
:指定字符集(推荐utf8mb4
,MySQL真正的UTF8,支持复杂中文字符);COLLATE
:指定校验规则(使用utf8mb4_0900_ai_ci
)。
示例:
sql
-- 创建db_test1数据库(默认字符集)
CREATE DATABASE db_test1;
-- 若不存在则创建db_test2(避免报错)
CREATE DATABASE IF NOT EXISTS db_test2;
-- 若不存在则创建db_test3,指定字符集为utf8mb4,
CREATE DATABASE IF NOT EXISTS db_test3 CHARACTER SET utf8mb4;
注意: MySQL允许使用关键字命名数据库名,但是必须用反引号``引起来
sql
create database `database`;
2.1.3 使用数据库
-
use 数据库名
: 操作某个数据库前,必须先"切换"到该数据库:示例:
USE db_test3;
,执行后终端会显示"Database changed"。 -
select database()
显示当前选择或操作的是哪个数据库
sql
SELECT database();
2.1.4 删除数据库
警告:删除数据库会清空所有表和数据,且无法恢复!
语法:
sql
DROP DATABASE [IF EXISTS] 数据库名;
示例:
sql
-- 直接删除db_test1(若不存在会报错)
DROP DATABASE db_test1;
-- 若存在则删除db_test2(安全写法)
DROP DATABASE IF EXISTS db_test2;
2.2 常用数据类型:选择合适的"容器"
创建表时,需为每个字段指定"数据类型",以下是MySQL中最常用的类型,对应Java类型也已标注,方便开发对接:
2.2.1 数值类型(存数字)
数据类型 | 大小 | 说明 | 对应Java类型 |
---|---|---|---|
BIT[(M)] | 1-8字节 | 二进制数(M=1时存0/1,对应布尔值) | Boolean |
TINYINT | 1字节 | 小整型(范围:-128~127) | Byte |
INT | 4字节 | 常用整型(范围:-231~231-1) | Integer |
BIGINT | 8字节 | 大整型(存海量数字,如订单号) | Long |
FLOAT(M,D) | 4字节 | 单精度浮点(会丢失精度,不推荐) | Float |
DOUBLE(M,D) | 8字节 | 双精度浮点(精度比FLOAT高,但仍有误差) | Double |
DECIMAL(M,D) | 可变 | 精确浮点(适合金额、汇率,无精度丢失) | BigDecimal |
注意:
- 数值类型可加
unsigned
(无符号,仅存正数),但不推荐------若int存不下,直接用BIGINT更稳妥; - 金额类字段必须用
DECIMAL(M,D)
(如DECIMAL(13,2)
表示最大13位数字,2位小数),避免精度丢失。
2.2.2 字符串类型(存文本)
数据类型 | 大小范围 | 说明 | 对应Java类型 |
---|---|---|---|
VARCHAR(SIZE) | 0-65535字节 | 可变长度字符串(存短文本,如姓名、手机号) | String |
TEXT | 0-65535字节 | 长文本(存文章内容、备注) | String |
MEDIUMTEXT | 0-16777215字节 | 中等长文本(存大段内容) | String |
BLOB | 0-65535字节 | 二进制文本(存图片、文件) | byte[] |
注意
- size表示字符串长度,不是字节大小。也就是说,定义
varchar(10)
,最多可以存放10个字符,多了就会报错。 - 在
utf8mb4
编码集,1个字符最多占4个字节,根据具体使用情况用1-4字节表示1个字符。一个varchar
最多可以存放 16383 (65535/4)个字符
推荐用法 :短文本用VARCHAR
(如姓名用VARCHAR(20)
),长文本用TEXT
,文件优先存在服务器磁盘,数据库只存文件路径(避免数据库过大)。
2.2.3 日期类型(存时间)
数据类型 | 大小 | 说明 | 对应Java类型 |
---|---|---|---|
DATETIME | 8字节 | 范围1000-9999年,不随时区变化(常用) | java.sql.Timestamp / java.util.Date |
TIMESTAMP | 4字节 | 范围1970-2038年,自动转换时区 | java.sql.Timestamp / java.util.Date |
选择建议 :若业务涉及多时区(如跨国项目),用TIMESTAMP
;否则用DATETIME
(范围更广,无2038年限制)。
2.3 表操作:5个核心命令
表是数据库中"存储数据的基本单元",操作前需先通过USE 数据库名
切换到目标数据库。
2.3.1 查看表结构
查看表的字段名、类型、是否允许为空等信息:
sql
DESC 表名;
示例:查看users
表结构:
sql
DESC users;
执行后会显示:
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | int(11) | YES | NULL | ||
name | varchar(20) | YES | NULL | ||
password | char(32) | YES | NULL |
- Feild:字段
- Type:数据类型
- Null:当前字段是否允许为空,如果置为No,那么字段中必须有值,不能为空
- Default:当前列的默认值
- Extra:其他拓展内容
2.3.2 创建表
语法:
sql
CREATE TABLE [IF NOT EXISTS] 表名 (
字段1 数据类型 [COMMENT '字段说明'],
字段2 数据类型 [COMMENT '字段说明'],
...
);
IF NOT EXISTS
:可选,避免"表已存在"报错;COMMENT
:可选,添加字段说明(方便后期维护)只是描述性的内容,对表结构没有影响。
示例:创建学生表stu_test
:
sql
CREATE TABLE IF NOT EXISTS stu_test (
id INT COMMENT '学生ID',
name VARCHAR(20) COMMENT '姓名',
password VARCHAR(50) COMMENT '密码',
age INT COMMENT '年龄',
sex VARCHAR(1) COMMENT '性别(男/女)',
birthday TIMESTAMP COMMENT '生日',
amount DECIMAL(13,2) COMMENT '余额',
resume TEXT COMMENT '个人简介'
);
2.3.3 查看数据库中的表
查看当前数据库下所有表:
sql
SHOW TABLES;
2.3.4 删除表
警告:删除表会清空表中所有数据,且无法恢复!
语法:
sql
DROP TABLE [IF EXISTS] 表名;
示例:
sql
-- 直接删除stu_test表(若不存在会报错)
DROP TABLE stu_test;
-- 若存在则删除(安全写法)
DROP TABLE IF EXISTS stu_test;
2.4 实战案例:创建商店数据库
为帮助大家巩固操作,这里以"商店购物系统"为例,创建包含"商品、客户、购买订单"三个表的数据库:
sql
-- 1. 创建数据库bit32mall(指定utf8字符集)
CREATE DATABASE IF NOT EXISTS bit32mall DEFAULT CHARACTER SET utf8;
-- 2. 切换到bit32mall数据库
USE bit32mall;
-- 3. 创建商品表goods
CREATE TABLE IF NOT EXISTS goods (
goods_id INT COMMENT '商品编号',
goods_name VARCHAR(32) COMMENT '商品名称',
unitprice INT COMMENT '单价(单位:分)',
category VARCHAR(12) COMMENT '商品分类',
provider VARCHAR(64) COMMENT '供应商名称'
);
-- 4. 创建客户表customer
CREATE TABLE IF NOT EXISTS customer (
customer_id INT COMMENT '客户编号',
name VARCHAR(32) COMMENT '客户姓名',
address VARCHAR(256) COMMENT '客户地址',
email VARCHAR(64) COMMENT '电子邮箱',
sex BIT COMMENT '性别(0=女,1=男)',
card_id VARCHAR(18) COMMENT '身份证号'
);
-- 5. 创建购买表purchase
CREATE TABLE IF NOT EXISTS purchase (
order_id INT COMMENT '订单号',
customer_id INT COMMENT '客户编号(关联customer表)',
goods_id INT COMMENT '商品编号(关联goods表)',
nums INT COMMENT '购买数量'
);
三、SQL分类:理解命令的"身份"
操作数据库要使用SQL,这即使一个标准,也是一门语言。
- DDL(data definition language, 数据定义语言) :维护数据结构(创建/删除数据库、表),代表命令:
CREATE
、DROP
、ALTER
; - DML(data manipulation language, 数据操纵语言) :操作表中数据(新增/修改/删除数据),代表命令:
INSERT
、UPDATE
、DELETE
; - DQL(data query language, 数据查询语言) :查询表中数据(最常用),代表命令:
SELECT
(单独从DML中拆分出来); - DCL(data control language, 数据控制语言) :权限管理和事务控制,代表命令:
GRANT
(授权)、REVOKE
(回收权限)、COMMIT
(提交事务)。