> ## Documentation Index
> Fetch the complete documentation index at: https://docs.akria.net/llms.txt
> Use this file to discover all available pages before exploring further.

# Day 07 | 第一阶段复盘

> Shell & SQL 基础阶段总结

<Info>
  **复盘日**：恭喜你完成了第一周的学习！今天是巩固和总结的日子。我们将回顾过去 6 天学到的所有知识，整理成速查表，并记录遇到的问题和解决方案。今天不只是复习，而是要彻底理解 **"如何将学到的知识系统化"**、**"如何建立自己的知识库"** 以及 **"如何为下一阶段的学习做好准备"**。
</Info>

## <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}><Icon icon="clipboard-check" size={26} color="#059669" /> 复盘内容 | Review</span>

<AccordionGroup>
  <Accordion title="Shell 核心点回顾" icon="terminal">
    **Day 01 - 基础入门**：

    * Shebang (`#!/bin/bash`)：指定解释器
    * 变量赋值：`name="value"`（等号两边不能有空格）
    * 变量引用：`$name` 或 `${name}`
    * 引号区别：单引号不解析变量，双引号解析变量
    * 执行权限：`chmod +x script.sh`

    **Day 02 - 流程控制**：

    * 条件判断：`if [ condition ]; then ... fi`
    * 文件测试：`[ -f "file" ]`、`[ -d "dir" ]`
    * 字符串比较：`[ "$str" == "value" ]`
    * 数值比较：`[ $num -gt 10 ]`
    * for 循环：`for i in {1..5}; do ... done`
    * while 循环：`while [ condition ]; do ... done`

    **Day 03 - 管道和函数**：

    * 管道：`command1 | command2`（数据从左到右流动）
    * 重定向：`>`（覆盖）、`>>`（追加）
    * 函数定义：`function_name() { ... }`
    * 函数参数：`$1`、`$2` 等
    * 返回值：通过 `return` 或 `echo` 返回

    **Day 04 - 三剑客**：

    * **grep**：过滤行，`grep "pattern" file`
    * **awk**：处理列，`awk '{print $1}' file`
    * **sed**：文本替换，`sed 's/old/new/g' file`
    * 组合使用：`grep | awk | sed`

    **Day 05 - 生产级脚本**：

    * 函数封装：将重复代码封装成函数
    * 错误处理：检查命令执行结果 `$?`
    * 颜色输出：使用 ANSI 转义码
    * 日志记录：统一日志输出格式
    * 配置管理：集中管理配置变量

    **Day 06 - 综合实战**：

    * Shell + SQL 整合：使用 `mysql -e` 执行 SQL
    * Here Document：`cat <<EOF` 处理多行文本
    * 报表生成：格式化输出为 Markdown
    * 异常处理：检查连接、验证结果
  </Accordion>

  <Accordion title="SQL 核心点回顾" icon="database">
    **Day 01 - 建表基础**：

    * 字段类型：`INT UNSIGNED`、`VARCHAR(n)`、`DATETIME`
    * 约束：`PRIMARY KEY`、`NOT NULL`、`DEFAULT`、`AUTO_INCREMENT`
    * 存储引擎：`ENGINE=InnoDB`
    * 字符集：`DEFAULT CHARSET=utf8mb4`

    **Day 02 - CRUD 操作**：

    * **INSERT**：`INSERT INTO table (col1, col2) VALUES (val1, val2)`
    * **SELECT**：`SELECT * FROM table WHERE condition`
    * **UPDATE**：`UPDATE table SET col=val WHERE condition`（必须加 WHERE！）
    * **DELETE**：`DELETE FROM table WHERE condition`（必须加 WHERE！）
    * 软删除 vs 硬删除：生产环境建议使用软删除

    **Day 03 - 聚合和联表**：

    * 聚合函数：`COUNT()`、`SUM()`、`AVG()`、`MAX()`、`MIN()`
    * GROUP BY：`SELECT col, COUNT(*) FROM table GROUP BY col`
    * LEFT JOIN：返回左表所有记录
    * INNER JOIN：只返回两表都有匹配的记录
    * COALESCE：处理 NULL 值

    **Day 04 - 索引优化**：

    * 创建索引：`ALTER TABLE table ADD INDEX idx_name (column)`
    * EXPLAIN：分析查询执行计划
    * type 字段：`ALL`（最慢）到 `const`（最快）
    * 索引失效：LIKE 左模糊、函数操作、类型转换

    **Day 05 - 慢查询优化**：

    * 避免全表扫描：使用索引、避免 `!=`、避免函数操作
    * 深分页优化：使用子查询先查 ID，再回表
    * 小表驱动大表：JOIN 时小表作为驱动表
    * 优化原则：避免索引失效、利用覆盖索引

    **Day 06 - 综合应用**：

    * 复杂查询：结合聚合、分组、联表
    * 数据统计：生成业务报表
    * Shell 整合：在脚本中执行 SQL 查询
  </Accordion>
</AccordionGroup>

***

## <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}><Icon icon="clipboard-check" size={26} color="#059669" /> 复盘产出 | Output</span>

### 1. 第一阶段速查表

创建一个属于你自己的常用命令清单，方便日后查阅。

<AccordionGroup>
  <Accordion title="Shell 命令速查表">
    **变量操作**：

    ```bash theme={null}
    name="value"           # 定义变量
    echo $name             # 输出变量
    readonly name="value"  # 只读变量
    ```

    **文件操作**：

    ```bash theme={null}
    chmod +x file.sh       # 添加执行权限
    mkdir -p dir           # 创建目录
    cp file1 file2         # 复制文件
    mv file1 file2         # 移动/重命名
    rm file                # 删除文件
    ```

    **条件判断**：

    ```bash theme={null}
    [ -f "file" ]          # 文件存在
    [ -d "dir" ]           # 目录存在
    [ "$str" == "val" ]    # 字符串相等
    [ $num -gt 10 ]        # 数值大于
    ```

    **循环**：

    ```bash theme={null}
    for i in {1..5}; do ... done
    while [ condition ]; do ... done
    ```

    **三剑客**：

    ```bash theme={null}
    grep "pattern" file
    awk '{print $1}' file
    sed 's/old/new/g' file
    ```
  </Accordion>

  <Accordion title="SQL 命令速查表">
    **表操作**：

    ```sql theme={null}
    CREATE TABLE ...       # 创建表
    ALTER TABLE ...        # 修改表
    DROP TABLE ...         # 删除表
    DESCRIBE table;        # 查看表结构
    ```

    **数据操作**：

    ```sql theme={null}
    INSERT INTO ...        # 插入
    SELECT ... FROM ...    # 查询
    UPDATE ... SET ...     # 更新（必须加 WHERE！）
    DELETE FROM ...        # 删除（必须加 WHERE！）
    ```

    **索引操作**：

    ```sql theme={null}
    ALTER TABLE ... ADD INDEX ...
    SHOW INDEX FROM table;
    EXPLAIN SELECT ...;
    ```

    **常用函数**：

    ```sql theme={null}
    COUNT(*)               # 统计行数
    SUM(column)            # 求和
    AVG(column)            # 平均值
    MAX(column)            # 最大值
    MIN(column)            # 最小值
    COALESCE(val, 0)       # 处理 NULL
    ```
  </Accordion>
</AccordionGroup>

### 2. 问题清单

记录过去 6 天遇到的坑和解决方法，这是你的宝贵经验。

<CardGroup cols={2}>
  <Card title="常见问题记录" icon="question-circle">
    **Shell 常见问题**：

    * 变量赋值等号两边有空格 → 报错
    * 字符串比较未加引号 → 空变量导致错误
    * 文件路径有空格未加引号 → 命令失败
    * 函数未定义就调用 → 报错

    **SQL 常见问题**：

    * UPDATE/DELETE 忘记加 WHERE → 更新/删除所有数据
    * 字符串比较未加引号 → 语法错误
    * LIKE 左模糊匹配 → 索引失效
    * 对字段使用函数 → 索引失效
  </Card>

  <Card title="解决方案记录" icon="lightbulb">
    **Shell 解决方案**：

    * 变量赋值：等号两边不能有空格
    * 字符串比较：必须加引号
    * 文件路径：始终加引号
    * 函数调用：先定义后调用

    **SQL 解决方案**：

    * UPDATE/DELETE：必须加 WHERE，更新前先 SELECT 确认
    * 字符串比较：必须加引号
    * 模糊匹配：尽量使用右模糊 `LIKE 'prefix%'`
    * 函数操作：将函数移到常量侧
  </Card>
</CardGroup>

### 3. 优化示例

挑选一个你认为写得最好的脚本进行重构，展示你的进步。

<AccordionGroup>
  <Accordion title="重构示例：Day 01 的 hello.sh">
    **原始版本**：

    ```bash theme={null}
    #!/bin/bash
    project_name="InsightfulOps"
    echo "Please enter today's date:"
    read current_date
    echo "Welcome to $project_name, today is $current_date"
    ```

    **优化版本**（应用 Week 1 学到的知识）：

    ```bash theme={null}
    #!/bin/bash
    # 01_hello_enhanced.sh - 增强版 Hello World

    # 配置区
    PROJECT_NAME="InsightfulOps"
    DATE_FORMAT="YYYY-MM-DD"

    # 颜色输出函数
    function echo_green() {
        echo -e "\033[32m$1\033[0m"
    }

    # 输入验证函数
    function validate_date() {
        local date_str="$1"
        # 简单的日期格式验证（实际应该更严格）
        if [[ "$date_str" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
            return 0
        else
            return 1
        fi
    }

    # 主流程
    echo_green "Welcome to $PROJECT_NAME"
    echo "Please enter today's date ($DATE_FORMAT):"
    read current_date

    # 输入验证
    if validate_date "$current_date"; then
        echo_green "Date validated: $current_date"
        echo "Welcome to $PROJECT_NAME, today is $current_date"
    else
        echo "Invalid date format. Please use $DATE_FORMAT"
        exit 1
    fi
    ```

    **改进点**：

    * 添加了配置区，便于修改
    * 添加了颜色输出函数，提高可读性
    * 添加了输入验证，提高健壮性
    * 添加了错误处理，优雅退出
    * 添加了注释，便于理解
  </Accordion>
</AccordionGroup>

***

## 🏆 阶段性总结

恭喜你！你已经完成了 **Project Team** 基础训练营的第一阶段。

<Info>
  **到这里你已经掌握了：**

  * **Shell 脚本能力**：从基础语法到生产级脚本编写
  * **SQL 数据库能力**：从建表到性能优化
  * **整合能力**：将 Shell 和 SQL 结合起来解决实际问题
  * **工程化思维**：函数封装、错误处理、代码复用
  * **为后续学习打下基础**：Python、FastAPI、Go 的学习将更轻松
</Info>

### 第一周学习成果

<CardGroup cols={2}>
  <Card title="Shell 技能树" icon="terminal">
    ✅ 基础语法（变量、输出、权限）
    ✅ 流程控制（条件、循环）
    ✅ 管道和重定向
    ✅ 函数封装
    ✅ 三剑客（grep/awk/sed）
    ✅ 生产级脚本编写
  </Card>

  <Card title="SQL 技能树" icon="database">
    ✅ 表结构设计
    ✅ CRUD 操作
    ✅ 聚合和分组
    ✅ 联表查询
    ✅ 索引优化
    ✅ 慢查询分析
  </Card>
</CardGroup>

### 下一阶段预告

<Tip>
  **第二周：Python 自动化与数据处理**

  * Day 08-14：学习 Python 基础语法、数据处理、自动化脚本
  * 你将能够：使用 Python 处理数据、编写自动化工具、与数据库交互
  * 第一周的基础将帮助你更快地理解 Python 的语法和概念
</Tip>

***

## <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}><Icon icon="file" size={26} color="#059669" /> 今日产出物</span>

* `day07/shell_cheatsheet.md` - Shell 命令速查表
* `day07/sql_cheatsheet.md` - SQL 命令速查表
* `day07/problems_and_solutions.md` - 问题清单和解决方案
* `day07/optimized_script.sh` - 优化后的脚本示例

***

## <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}><Icon icon="github" size={26} color="#059669" /> 参考资源</span>

<CardGroup cols={2}>
  <Card title="Shell 学习资源" icon="book">
    * [Bash 脚本教程](https://www.runoob.com/linux/linux-shell.html)
    * [Advanced Bash Scripting Guide](https://tldp.org/LDP/abs/html/)
    * [Shell 脚本最佳实践](https://github.com/koalaman/shellcheck)
  </Card>

  <Card title="SQL 学习资源" icon="database">
    * [MySQL 官方文档](https://dev.mysql.com/doc/)
    * [SQL 性能优化指南](https://dev.mysql.com/doc/refman/8.0/en/optimization.html)
    * [EXPLAIN 详解](https://dev.mysql.com/doc/refman/8.0/en/explain.html)
  </Card>
</CardGroup>

***

<CardGroup cols={2}>
  <Card title="上一课" href="/training/30daystudy/day-06">
    Day 06：Shell + SQL 综合实战
  </Card>

  <Card title="下一阶段" href="/training/30daystudy/day-08">
    Day 08：Python 基础入门
  </Card>
</CardGroup>
