前言

这篇文章是 MysQL 基础知识的一个小总结,主要用于快速复习和突击面试

有借助 ai 编写

个人主页有很多个人总结的 Java、MySQL 等相关的面试热题,欢迎关注~

一、 核心概念

  1. 数据库 (Database):

    • 存储数据的逻辑容器(类似文件夹)。

    • CREATE DATABASE dbname; (创建) / USE dbname; (选择) / DROP DATABASE dbname; (删除)

  2. 表 (Table):

    • 结构化数据的集合,由行和列组成(类似 Excel 表格)。

    • 每个表有一个唯一名称。

    • CREATE TABLE tablename (...); / DROP TABLE tablename; / DESCRIBE tablename; (查看结构)

  3. 列 (Column / Field):

    • 表中的一个属性,代表数据的某一类信息(如 id, name, email)。

    • 定义时需要指定数据类型(见下文)。

  4. 行 (Row / Record):

    • 表中的一个具体数据项,包含所有列的值(如一个用户的所有信息)。

  5. 主键 (Primary Key):

    • 一个或一组唯一标识表中每行记录的列。

    • 不能重复不能为 NULL

    • 每个表通常应该有一个主键(PRIMARY KEY (column))。

  6. 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)

SQL 常用语法(详细)

  1. 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; -- 分组聚合
  2. INSERT - 插入新行

    INSERT INTO tablename (column1, column2) VALUES (value1, value2); -- 指定列插入
    INSERT INTO tablename VALUES (value1, value2, ...); -- 为所有列插入 (需按顺序)
  3. UPDATE - 修改现有行

    UPDATE tablename SET column1 = new_value1, column2 = new_value2 WHERE condition; -- 务必用WHERE限定范围!
  4. 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 等相关的面试热题,欢迎关注~

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐