文章目录
- 一、数据库基础:理解数据管理的核心工具
 - 
- [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(提交事务)。