【快速复习】MySQL 基础知识
这篇文章是 MysQL 基础知识的一个小总结,主要用于快速复习和突击面试有借助 ai 编写个人主页有很多个人总结的 Java、MySQL 等相关的面试热题,欢迎关注~
前言
这篇文章是 MysQL 基础知识的一个小总结,主要用于快速复习和突击面试
有借助 ai 编写
个人主页有很多个人总结的 Java、MySQL 等相关的面试热题,欢迎关注~
一、 核心概念
-
数据库 (Database):
-
存储数据的逻辑容器(类似文件夹)。
-
CREATE DATABASE dbname;
(创建) /USE dbname;
(选择) /DROP DATABASE dbname;
(删除)
-
-
表 (Table):
-
结构化数据的集合,由行和列组成(类似 Excel 表格)。
-
每个表有一个唯一名称。
-
CREATE TABLE tablename (...);
/DROP TABLE tablename;
/DESCRIBE tablename;
(查看结构)
-
-
列 (Column / Field):
-
表中的一个属性,代表数据的某一类信息(如
id
,name
,email
)。 -
定义时需要指定数据类型(见下文)。
-
-
行 (Row / Record):
-
表中的一个具体数据项,包含所有列的值(如一个用户的所有信息)。
-
-
主键 (Primary Key):
-
一个或一组唯一标识表中每行记录的列。
-
值不能重复且不能为 NULL。
-
每个表通常应该有一个主键(
PRIMARY KEY (column)
)。
-
-
SQL (Structured Query Language):
-
用于与关系型数据库通信的标准语言。
-
主要分类:
-
DDL (Data Definition Language): 定义/修改结构 (
CREATE
,ALTER
,DROP
,TRUNCATE
) -
DML (Data Manipulation Language): 操作数据 (
SELECT
,INSERT
,UPDATE
,DELETE
) -
DCL (Data Control Language): 权限控制 (
GRANT
,REVOKE
) -
TCL (Transaction Control Language): 事务控制 (
COMMIT
,ROLLBACK
,SAVEPOINT
)
-
-
二、 基本操作 (DML)
-
SELECT
- 查询数据SELECT column1, column2 FROM tablename; -- 选择特定列 SELECT * FROM tablename; -- 选择所有列 SELECT DISTINCT column FROM tablename; -- 去重 SELECT ... FROM ... WHERE condition; -- 条件过滤 (e.g., WHERE age > 18, WHERE name = 'Alice') SELECT ... ORDER BY column [ASC|DESC]; -- 排序 SELECT ... LIMIT number; -- 限制返回行数 SELECT ... GROUP BY column HAVING condition; -- 分组聚合
-
INSERT
- 插入新行INSERT INTO tablename (column1, column2) VALUES (value1, value2); -- 指定列插入 INSERT INTO tablename VALUES (value1, value2, ...); -- 为所有列插入 (需按顺序)
-
UPDATE
- 修改现有行UPDATE tablename SET column1 = new_value1, column2 = new_value2 WHERE condition; -- 务必用WHERE限定范围!
-
DELETE
- 删除行DELETE FROM tablename WHERE condition; -- 务必用WHERE限定范围! 删除所有行用 `TRUNCATE TABLE tablename;` (更快)
三、 常用数据类型
-
整数:
TINYINT
,SMALLINT
,INT
/INTEGER
,BIGINT
-
小数:
FLOAT
,DOUBLE
,DECIMAL(M, D)
(精确小数, M总位数, D小数位) -
字符串:
-
定长:
CHAR(size)
(空格填充到指定长度) -
变长:
VARCHAR(size)
(最大长度, 按需存储) -
文本:
TEXT
(大段文本)
-
-
日期时间:
-
DATE
(YYYY-MM-DD) -
TIME
(HH:MM:SS) -
DATETIME
(YYYY-MM-DD HH:MM:SS) -
TIMESTAMP
(时间戳, 范围较小但有时区转换)
-
-
布尔:
BOOLEAN
/BOOL
(本质是TINYINT(1)
, 0=FALSE, 1=TRUE) -
枚举:
ENUM('val1', 'val2')
(单选) -
集合:
SET('val1', 'val2')
(多选)
四、 约束 (Constraints)
-
保证数据完整性的规则,定义在列或表上:
-
NOT NULL
: 列值不能为空。 -
UNIQUE
: 列值必须唯一(允许 NULL)。 -
PRIMARY KEY
: 主键 (NOT NULL
+UNIQUE
)。 -
FOREIGN KEY
: 外键,确保一个表中的值匹配另一个表的主键 (REFERENCES othertable(column)
),维护引用完整性。 -
CHECK
: 定义列值必须满足的条件 (MySQL 8.0+ 支持)。 -
DEFAULT
: 设置列的默认值。
-
五、 连接 (Joins)
-
基于表之间的关联列,从多个表中组合数据。
-
INNER JOIN
(内连接): 返回两个表中匹配的行。SELECT orders.id, customers.name FROM orders INNER JOIN customers ON orders.customer_id = customers.id;
-
LEFT (OUTER) JOIN
(左外连接): 返回左表所有行 + 右表匹配的行 (不匹配则右表列用NULL
填充)。 -
RIGHT (OUTER) JOIN
(右外连接): 返回右表所有行 + 左表匹配的行。 -
FULL (OUTER) JOIN
(全外连接): 返回所有行 (MySQL 不直接支持,可用UNION
实现)。 -
CROSS JOIN
(交叉连接): 返回两个表的笛卡尔积(所有可能组合)。
六、 聚合函数
-
对一组值计算,返回单一值。常与
GROUP BY
连用。-
COUNT()
: 计数行数 (COUNT(*) 所有行, COUNT(column) 非NULL行)。 -
SUM()
: 求和。 -
AVG()
: 求平均值。 -
MAX()
: 最大值。 -
MIN()
: 最小值。 -
GROUP_CONCAT()
: 将分组内的值连接成字符串。
-
七、 事务 (Transactions)
-
一组 SQL 语句作为一个原子单元执行。满足 ACID 特性:
-
A (Atomicity) 原子性: 事务内的操作要么全部成功,要么全部失败回滚。
-
C (Consistency) 一致性: 事务使数据库从一个一致状态转换到另一个一致状态。
-
I (Isolation) 隔离性: 并发事务之间互不干扰。
-
D (Durability) 持久性: 事务一旦提交,其结果就是永久性的。
-
-
基本命令:
START TRANSACTION; -- 或 BEGIN -- 执行多条SQL语句 (INSERT, UPDATE, DELETE) COMMIT; -- 提交事务,使更改永久生效 ROLLBACK; -- 回滚事务,撤销所有未提交的更改
八、 索引 (Indexes)
-
一种数据结构(通常是 B-Tree),用于快速查找表中的特定行。
-
优点: 极大提高
SELECT
查询速度(尤其是WHERE
,ORDER BY
,JOIN
)。 -
缺点: 占用磁盘空间;降低
INSERT
,UPDATE
,DELETE
的速度(因为索引也需要维护)。 -
常见类型:
-
普通索引 (
INDEX
/KEY
): 最基本的索引。 -
唯一索引 (
UNIQUE INDEX
): 索引列的值必须唯一(允许 NULL)。 -
主键索引 (
PRIMARY KEY
): 特殊的唯一索引,不允许 NULL。 -
复合索引 (Composite Index): 基于多个列的索引(顺序很重要)。
-
-
创建:
CREATE INDEX index_name ON tablename (column1, [column2, ...]); CREATE UNIQUE INDEX index_name ON tablename (column); ALTER TABLE tablename ADD INDEX index_name (column); -- 修改表添加
-
何时创建: 经常用于
WHERE
条件、JOIN
连接、ORDER BY
排序的列。
本篇文章到此结束,如果对你有帮助可以点个赞吗~
个人主页有很多个人总结的 Java、MySQL 等相关的面试热题,欢迎关注~
更多推荐
所有评论(0)