初识数据库 & SQL 核心知识精讲
同学你好,今天咱们把数据库基础、SQL 分类、库 / 表操作、数据类型和约束这些核心知识讲透,全程结合实操场景,不讲纯理论,保证你听完就能上手用,内容对应咱们的学习文档,重点地方会反复强调~
一、先搞懂:什么是数据库?分哪两类?
数据库本质就是专业的存储和管理数据的系统 ,我们对数据的增、查、改、删操作(简称CRUD),都要通过数据库来完成,它能保证数据存储的高效、安全和规范。
数据库主要分关系型(SQL)和 非关系型(NoSQL)两大类,核心区别是数据存储结构 和适用场景,咱们用表格对比着记,更清晰:
1. 关系型数据库(重点,咱们后续核心学这个)
- 核心特点 :用二维表格(行 + 列)存数据,表与表之间可以建立关联关系;必须用SQL 语言 操作;适合存结构化数据(格式固定的,比如用户信息、订单、商品数据)。
- 常见代表:MySQL(免费开源,网站开发首选,咱们课程主力用)、Oracle(商业级,银行 / 金融用)、SQL Server(微软,企业应用)、SQLite(轻量,移动端 / 小型应用)。
2. 非关系型数据库
- 核心特点 :不用表格,用键值对、文档、图 等结构存数据;不用标准 SQL,各有自己的操作语法;适合存非结构化 / 半结构化数据 (格式不固定,比如 JSON、日志、图片),主打高并发、大数据量场景。
- 常见代表:Redis(键值型,做高速缓存,比如微信点赞计数)、MongoDB(文档型,存 JSON 数据,比如内容管理)、Neo4j(图型,做社交关系分析)。
一句话总结:做常规网站 / 企业应用,用关系型(MySQL);做高并发 / 大数据 / 非结构化数据存储,用非关系型(Redis/MongoDB)。
二、SQL 核心:是什么?分哪几类?怎么写?
1. SQL 是什么?
SQL(结构化查询语言)是操作关系型数据库的通用语言 ,它是声明式语言------ 你只需要告诉数据库「你要做什么」(比如 "查商品表中价格大于 100 的商品"),不用告诉它「怎么做」(数据库自己会优化查询步骤)。
注意:有标准 SQL,但不同数据库(MySQL/Oracle)会有少量专属语法,咱们课程学标准 SQL,通用于所有关系型数据库。
2. SQL 四大分类(按功能分,必考 + 必用)
这是核心中的核心,一定要记死!后续所有操作都围绕这四类展开,重点是 DML 和 DQL(工作中 90% 的 SQL 都是这两类)。
| 分类 | 英文缩写 | 核心功能 | 常用命令 | 适用场景 |
|---|---|---|---|---|
| 数据定义语言 | DDL | 操作数据库 / 表(创建、删除、修改) | CREATE(创建)、DROP(删除)、ALTER(修改) | 库 / 表的初始化、结构调整 |
| 数据操纵语言 | DML | 操作表中的数据(增、删、改) | INSERT(增)、UPDATE(改)、DELETE(删) | 日常数据维护(比如新增用户、修改订单状态) |
| 数据查询语言 | DQL | 查表中的数据 | SELECT(唯一命令) | 数据查询(比如查销量 Top10 的商品,工作中用得最多) |
| 数据控制语言 | DCL | 控制用户权限 | GRANT(赋权)、REVOKE(收权) | 数据库管理(比如给开发人员分配「只读」权限) |
3. SQL 语法规则(必遵守,否则报错)
这几条是硬性规则,写 SQL 时一旦违反,直接报错,一定要养成习惯:
- SQL 语句必须以分号;结尾(数据库靠分号识别语句结束);
- SQL 关键字(比如 SELECT、CREATE)不区分大小写 (SELECT 和 select 一样),但表中的数据区分大小写(比如 "张三" 和 "张三" 是同一个,"user" 和 "User" 是不同数据);
- 数据库名、表名、字段名:Linux/Mac 区分大小写,Windows 不区分 ,建议一律小写,避免坑;
- 数据库名、表名、字段名:只能用半角英文字母、数字、下划线 ,且必须以英文字母开头 (比如
product_id合法,123_product、product-name非法)。
三、DDL 实操:数据库的操作(创建、查看、删除、使用)
所有操作都在MySQL 的 mysql > 提示符下执行(先通过 sudo mysql 或 mysql -u root -p 登录 MySQL),核心是 4 个命令,全是 DDL(CREATE/DROP/SHOW/USE)。
1. 创建数据库
语法 :CREATE DATABASE 数据库名;示例 :创建名为 test 的数据库 → CREATE DATABASE test;小贴士 :工作中创建数据库一定要指定字符集 (CREATE DATABASE test DEFAULT CHARACTER SET utf8mb4;),utf8mb4 支持中文 + emoji,是目前的标准。
2. 查看数据库
- 查看 MySQL 中所有数据库 :
SHOW DATABASES;(执行后会列出所有库,包括 MySQL 自带的系统库); - 查看某个数据库的创建语句 :
SHOW CREATE DATABASE 数据库名;(比如SHOW CREATE DATABASE test;,能看到字符集等配置)。
3. 删除数据库
语法 :DROP DATABASE 数据库名;示例 :删除 test 数据库 → DROP DATABASE test;警告 :删除数据库会彻底删除库中所有表和数据,不可恢复,工作中一定要谨慎(一般加权限控制,不让普通开发删除)。
4. 使用数据库
语法 :USE 数据库名;示例 :使用 test 数据库 → USE test;必做步骤 :所有对表的操作(创建、增删改查),必须先执行 USE 命令指定数据库 ,否则数据库不知道你要操作哪个库的表,直接报错!执行成功会提示:Database changed(数据库已切换)。
四、DDL 实操:表的操作(创建、查看、修改、删除)
表是关系型数据库存储数据的最小单位 (二维表格),操作表的前提是已执行 USE 命令指定数据库。
1. 创建表(核心 DDL 操作,CREATE)
这是最复杂的表操作,因为要定义字段名、数据类型、字段约束,语法一定要记熟:
基本语法
cpp
CREATE TABLE 表名 (
字段名1 数据类型 [约束] [默认值],
字段名2 数据类型 [约束] [默认值],
...
表级约束(比如主键)
);
注意 :字段之间用逗号 分隔,最后一个字段不加逗号(新手最容易犯的错)。
实操示例(创建商品表 product)
sql
cpp
CREATE TABLE product (
product_id char(4) NOT NULL, -- 商品编号,固定4个字符,非空
product_name varchar(100) NOT NULL, -- 商品名称,可变长度,最多100字符,非空
product_type varchar(32) NOT NULL DEFAULT '水果', -- 商品种类,默认值为"水果"
sale_price int, -- 销售单价,整型
purchase_price int, -- 进货单价,整型
register_date date, -- 登记日期,日期类型
PRIMARY KEY (product_id) -- 表级约束:主键为商品编号
);
这个例子要吃透,后续所有建表操作都是这个格式。
2. 查看表
- 查看当前数据库中所有表 :
SHOW TABLES;(比如 USE test 后执行,会列出 test 库中的所有表); - 查看某个表的创建语句 :
SHOW CREATE TABLE 表名;(比如SHOW CREATE TABLE product;,能看到字段、数据类型、约束、字符集等所有配置);
3. 修改表(了解即可,工作中尽量少用)
语法:ALTER TABLE 表名 操作;,常用操作有 3 种:
- 添加字段:
ALTER TABLE product ADD COLUMN product_pinyin VARCHAR(100);(给商品表加 "商品拼音" 字段); - 删除字段:
ALTER TABLE product DROP COLUMN product_pinyin;(删除 "商品拼音" 字段); - 修改字段:
ALTER TABLE product MODIFY sale_price decimal(10,2) NOT NULL;(把销售单价从 int 改成小数,且非空);
警告:线上库不要随意修改表结构(尤其是删字段),会影响业务运行。
4. 删除表
语法 :DROP TABLE 表名;示例 :删除 product 表 → DROP TABLE product;警告 :删除表会彻底删除表结构 + 所有数据,不可恢复,比删数据库还危险,工作中一定要先备份再删除!
五、数据库核心:数据类型
创建表时,每个字段必须指定数据类型 ------ 数据库会根据数据类型分配存储空间,且只能存储对应类型的数据(比如 int 字段不能存字符串,否则报错)。
咱们只记工作中最常用的核心数据类型,分三大类,其他类型了解即可:
1. 数值类型(存数字:价格、年龄、数量)
| 类型 | 特点 | 适用场景 |
|---|---|---|
| INT | 整型,4 个字节,范围大(-21 亿~21 亿) | 年龄、数量、ID(最常用) |
| BIGINT | 大整型,8 个字节,范围更大 | 超大数字(比如订单号、手机号) |
| DECIMAL(M,D) | 小数(定点数,精准无误差) | 价格、金额(必须用这个,不能用 FLOAT/DOUBLE,避免精度丢失) |
| BOOL/BOOLEAN | 布尔型,用 1(真)/0(假)表示 | 状态(比如是否启用:1 = 启用,0 = 禁用) |
重点 :金额 / 价格必须用 DECIMAL (M,D),M 表示总位数,D 表示小数位数(比如 DECIMAL (10,2) 表示最多 10 位,小数点后 2 位,最大 99999999.99)。
2. 文本 / 字符串类型(存文字:姓名、商品名、地址)
这是最常用的类型,核心记CHAR 和 VARCHAR的区别(必考):
| 类型 | 特点 | 适用场景 |
|---|---|---|
| CHAR(size) | 固定长度字符串,size 为字符数,存满补空格 | 长度固定的字符串(比如手机号、身份证号、商品编号,char (11) 存手机号) |
| VARCHAR(size) | 可变长度字符串,size 为最大字符数,按实际长度存 | 长度不固定的字符串(比如姓名、商品名、地址,varchar (100) 存商品名) |
| TEXT | 长文本 | 超长篇文字(比如文章内容,工作中尽量少用,影响查询速度) |
核心区别 :CHAR 速度快,浪费空间;VARCHAR 节省空间,速度稍慢,根据实际长度选择。
3. 日期和时间类型(存时间:登记日期、订单时间)
| 类型 | 格式 | 适用场景 |
|---|---|---|
| DATE | YYYY-MM-DD(年 - 月 - 日) | 只需要日期(比如生日、登记日期) |
| TIME | HH:MM:SS(时:分: 秒) | 只需要时间(比如打卡时间) |
| DATETIME | YYYY-MM-DD HH:MM:SS | 日期 + 时间(比如订单创建时间,最常用) |
| TIMESTAMP | YYYY-MM-DD HH:MM:SS | 时间戳,自动更新(比如数据修改时间,修改数据时自动刷新为当前时间) |
重点:DATETIME 手动赋值,TIMESTAMP 自动更新,根据需求选择。
六、数据库的 "安全卫士":约束
1. 约束是什么?
约束是给表 / 字段设置的 "规则" ,数据库会强制遵守这些规则,防止无效 / 错误数据进入数据库(比如姓名不能为空、手机号不能重复)。
约束的核心价值:保证数据的完整性、一致性 ,同时降低应用层的校验工作量(比如数据库设置了 "姓名非空",后端代码就不用再判断姓名是否为空了)。
2. 常用约束类型(7 种,核心 6 种,记作用 + 用法)
约束可以加在字段后 (字段级约束),也可以加在表最后 (表级约束,比如主键、外键),咱们按重要程度排序讲解:
| 约束类型 | 核心作用 | 示例(商品表) | 关键说明 |
|---|---|---|---|
| NOT NULL | 字段不能为空 | product_name VARCHAR(100) NOT NULL | 关键字段必须加(比如姓名、商品名、ID) |
| PRIMARY KEY(主键) | 唯一标识表中每一行,NOT NULL+UNIQUE | PRIMARY KEY (product_id) | 每张表必须有且只有一个主键(比如商品编号、用户 ID),自动创建索引,提高查询速度 |
| UNIQUE | 字段值唯一,不能重复 | email VARCHAR(100) UNIQUE | 适合唯一标识的字段(比如邮箱、手机号),可以多个字段加 UNIQUE |
| DEFAULT | 字段未赋值时,用默认值填充 | product_type VARCHAR (32) DEFAULT ' 水果' | 避免数据缺失(比如商品种类默认是水果,状态默认是启用) |
| CHECK | 限制字段值符合指定条件 | age INT CHECK (age > 0) | 限制数值范围(比如年龄 > 0、价格 > 0) |
| FOREIGN KEY(外键) | 维护表与表之间的关系 | order 表中 user_id FOREIGN KEY REFERENCES user (id) | 让两张表建立关联(比如订单表关联用户表),防止孤立数据(比如没有用户的订单) |
| AUTO_INCREMENT | 整型字段自动递增 | id INT PRIMARY KEY AUTO_INCREMENT | 一般用于主键(比如用户 ID:1、2、3... 自动生成,不用手动赋值) |
3. 约束实操示例(创建学生表,包含核心约束)
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键+自动递增,唯一标识学生
name VARCHAR(50) NOT NULL, -- 姓名非空
age INT CHECK (age > 0 AND age < 150), -- 年龄必须大于0小于150
email VARCHAR(100) UNIQUE, -- 邮箱唯一
gender VARCHAR(10) DEFAULT '未知', -- 性别默认未知
class_id INT, -- 班级ID
FOREIGN KEY (class_id) REFERENCES classes(id) -- 外键,关联班级表的id
);
这个例子包含了所有核心约束,吃透它,约束就全懂了!
七、本节课核心总结(必背)
- 数据库分两类:关系型(MySQL,表格 + SQL,结构化数据) 、非关系型(Redis/MongoDB,非表格,非结构化 / 高并发);
- SQL 分四类:DDL(操作库 / 表:CREATE/DROP/ALTER) 、DML(操作数据:INSERT/UPDATE/DELETE) 、DQL(查询:SELECT) 、DCL(权限:GRANT/REVOKE);
- SQL 语法规则:分号结尾 、关键字不区分大小写 、库 / 表 / 字段名小写 + 字母开头;
- 库操作四步:创建(CREATE)、查看(SHOW)、删除(DROP)、使用(USE) ,操作表必先 USE 库;
- 表操作核心:创建表要指定字段名 + 数据类型 + 约束,删除表 / 库需谨慎;
- 常用数据类型:INT(数字)、DECIMAL(金额)、VARCHAR(可变字符串)、DATETIME(日期时间);
- 约束是数据的 "规则":** 主键(必加)、NOT NULL(关键字段)、UNIQUE(唯一字段)、DEFAULT(默认值)** 是工作中最常用的,外键用于表关联。