文章目录
- 一、数据库基础:数据管理的工具
- 1.1 为什么需要数据库?文件存储的局限性
- 1.2 数据库分类:关系型与非关系型的核心区别
- 主流数据库举例
- 二、MySQL基础操作:数据库与表的核心命令
- 2.1 数据库操作:4个核心命令
- 2.1.1 显示所有数据库
- 2.1.2 创建数据库
- 2.1.3 使用数据库
- 2.1.4 删除数据库
- 2.2 常用数据类型:选择合适的“容器”
- 2.2.1 数值类型(存数字)
- 2.2.2 字符串类型(存文本)
- 2.2.3 日期类型(存时间)
- 2.3 表操作:5个核心命令
- 2.3.1 查看表结构
- 2.3.2 创建表
- 2.3.3 查看数据库中的表
- 2.3.4 删除表
- 2.3.5 修改表属性
- 三、SQL分类:理解命令的身份
在数据驱动的时代,数据库是存储和管理数据的核心工具。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中已存在的数据库:
SHOWDATABASES;执行后会显示系统默认数据库和自定义数据库。系统默认数据库记录关于MySQL自身的配置,性能,系统变量信息
2.1.2 创建数据库
语法:
CREATEDATABASE[IFNOTEXISTS]数据库名[DEFAULTCHARACTERSET字符集][DEFAULTCOLLATE校验规则];IF NOT EXISTS:可选,避免“数据库已存在”报错;CHARACTER SET:指定字符集(推荐utf8mb4,MySQL真正的UTF8,支持复杂中文字符);COLLATE:指定校验规则(使用utf8mb4_0900_ai_ci)。
示例:
-- 创建db_test1数据库(默认字符集)CREATEDATABASEdb_test1;-- 若不存在则创建db_test2(避免报错)CREATEDATABASEIFNOTEXISTSdb_test2;-- 若不存在则创建db_test3,指定字符集为utf8mb4,CREATEDATABASEIFNOTEXISTSdb_test3CHARACTERSETutf8mb4;注意:MySQL允许使用关键字命名数据库名,但是必须用反引号``引起来
createdatabase`database`;2.1.3 使用数据库
use 数据库名:操作某个数据库前,必须先“切换”到该数据库:
示例:USE db_test3;,执行后终端会显示“Database changed”。select database()显示当前选择或操作的是哪个数据库
SELECTdatabase();2.1.4 删除数据库
警告:删除数据库会清空所有表和数据,且无法恢复!
语法:
DROPDATABASE[IFEXISTS]数据库名;示例:
-- 直接删除db_test1(若不存在会报错)DROPDATABASEdb_test1;-- 若存在则删除db_test2(安全写法)DROPDATABASEIFEXISTSdb_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 查看表结构
查看表的字段名、类型、是否允许为空等信息:
DESC表名;示例:查看users表结构:
DESCusers;执行后会显示:
| 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 创建表
语法:
CREATETABLE[IFNOTEXISTS]表名(字段1数据类型[COMMENT'字段说明'],字段2数据类型[COMMENT'字段说明'],...);IF NOT EXISTS:可选,避免“表已存在”报错;COMMENT:可选,添加字段说明(方便后期维护)只是描述性的内容,对表结构没有影响。
示例:创建学生表stu_test:
createtableifnotexistsstu_test(idintcomment'学生ID',namevarchar(20)comment'姓名',passwordvarchar(50)comment'密码',ageintcomment'年龄',sexvarchar(1)comment'性别(男/女)',birthdaytimestampcomment'生日',amountdecimal(13,2)comment'余额',resumetextcomment'个人简介');2.3.3 查看数据库中的表
查看当前数据库下所有表:
SHOWTABLES;2.3.4 删除表
警告:删除表会清空表中所有数据,且无法恢复!
语法:
DROPTABLE[IFEXISTS]表名;示例:
-- 直接删除stu_test表(若不存在会报错)DROPTABLEstu_test;-- 若存在则删除(安全写法)DROPTABLEIFEXISTSstu_test;2.3.5 修改表属性
ALTER TABLE :修改已经建好的表的任何结构
- 修改字段类型、长度、非空、默认值
- 添加/删除主键、外键、唯一、CHECK 约束
- 新增/删除/重命名字段
- 修改表名
1. 修改字段属性(类型/非空/长度)
ALTERTABLE表名MODIFY字段名 类型[约束];示例:
altertablestudentmodifysnamevarchar(20)notnull;注意:必须写完整类型+约束
2. 设置/删除默认值
ALTERTABLE表名ALTER字段SETDEFAULT'值';ALTERTABLE表名ALTER字段DROPDEFAULT;3. 添加主键
ALTERTABLE表名ADDPRIMARYKEY(字段);4. 添加外键
ALTERTABLE从表ADDFOREIGNKEY(外键字段)REFERENCES主表(主键)ONDELETE删除规则ONUPDATE更新规则;- 四大规则
CASCADE级联删除/更新SET NULL删除后主表字段设为空RESTRICT禁止删除/更新(默认)NO ACTION同 RESTRICT
5. 添加 CHECK 约束
ALTERTABLE表名ADDCHECK(条件);示例:
ALTERTABLEstudentADDCHECK(sage>10ANDsage<40);6. 添加/删除字段
-- 添加字段ALTERTABLE表名ADD字段 类型;-- 删除字段ALTERTABLE表名DROP字段;7. 重命名字段
ALTERTABLE表名 CHANGE 旧名 新名 类型;8. 修改表名
ALTERTABLE旧表名RENAME新表名;注意:
- 外键必须字段类型完全一致
- 外键可以为空,可以重复
- 修改非空前必须确保无 NULL 值
- 添加约束时,现有数据必须符合规则
MODIFY必须写完整字段定义
三、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(提交事务)。