SQL核心知识精讲:从入门到实战

初识数据库 & 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 时一旦违反,直接报错,一定要养成习惯:

  1. SQL 语句必须以分号;结尾(数据库靠分号识别语句结束);
  2. SQL 关键字(比如 SELECT、CREATE)不区分大小写 (SELECT 和 select 一样),但表中的数据区分大小写(比如 "张三" 和 "张三" 是同一个,"user" 和 "User" 是不同数据);
  3. 数据库名、表名、字段名:Linux/Mac 区分大小写,Windows 不区分建议一律小写,避免坑;
  4. 数据库名、表名、字段名:只能用半角英文字母、数字、下划线 ,且必须以英文字母开头 (比如product_id合法,123_productproduct-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
);

这个例子包含了所有核心约束,吃透它,约束就全懂了!

七、本节课核心总结(必背)

  1. 数据库分两类:关系型(MySQL,表格 + SQL,结构化数据)非关系型(Redis/MongoDB,非表格,非结构化 / 高并发)
  2. SQL 分四类:DDL(操作库 / 表:CREATE/DROP/ALTER)DML(操作数据:INSERT/UPDATE/DELETE)DQL(查询:SELECT)DCL(权限:GRANT/REVOKE)
  3. SQL 语法规则:分号结尾关键字不区分大小写库 / 表 / 字段名小写 + 字母开头
  4. 库操作四步:创建(CREATE)、查看(SHOW)、删除(DROP)、使用(USE)操作表必先 USE 库
  5. 表操作核心:创建表要指定字段名 + 数据类型 + 约束,删除表 / 库需谨慎;
  6. 常用数据类型:INT(数字)、DECIMAL(金额)、VARCHAR(可变字符串)、DATETIME(日期时间);
  7. 约束是数据的 "规则":** 主键(必加)、NOT NULL(关键字段)、UNIQUE(唯一字段)、DEFAULT(默认值)** 是工作中最常用的,外键用于表关联。
相关推荐
zhougl9962 小时前
mysql数据库存储引擎
数据库·mysql·oracle
卓豪终端管理2 小时前
实力领跑!卓豪荣获 2026 高德纳双料认可
大数据·数据库·人工智能
A小码哥2 小时前
Agent 记忆系统标准方案为何失效
数据库·agent
魑-魅-魍-魉2 小时前
金仓数据库(KingbaseES)V8R3 Windows 版大小写敏感设置详解
数据库·windows·金仓
上海合宙LuatOS2 小时前
LuatOS核心库API——【fatfs】支持FAT32文件系统
java·前端·网络·数据库·单片机·嵌入式硬件·物联网
认真的薛薛2 小时前
数据库-主从故障排查,gitd,延时同步
数据库·sql·mysql
dishugj2 小时前
【Oracle】理论知识
数据库·oracle
m0_528749002 小时前
linux编程----目录流
java·前端·数据库
大尚来也2 小时前
Oracle索引扫描全解析:四大核心类型与性能优化实战指南
数据库