# TiDB SQL for Developers (v6.0)

## 课程基本信息
+ 课程名: TiDB SQL for Developers
+ 副标题: Learn How to Use SQL in TiDB for Application
+ 版本
  + TiDB base version: 5.3.0 (5.3.0 以上的功能显性声明)
  + 课程: 0.2.0
+ 参考材料: 
  + [TiDB 文档](https://docs.pingcap.com/zh/tidb/stable/)
  + [MySQL 文档](https://dev.mysql.com/doc/)

## 课程简介
+ 本课程注重实际操作技能, 为后端开发者或意向成为后端开发的学习者们详细介绍如何在 TiDB 上使用 SQL 语言、以及利用 Connectors API 对数据进行各种操作。

## 课程学习前提条件
+ 本课程对学习者无任何前提要求, 工作经验与起点不同的学习者可以采用不同的学习路径:
  + 初学者请按顺序完成全部章节的学习。
  + 因为 `TiDB` 具有与 `MySQL` 兼容性良好, 如果您已经熟悉 `MySQL SQL` 或标准 `SQL`, 但对 `Database Connector API` 比较陌生, 请跳过课程 201.2。
  + 额外地, 如您已经具备丰富的 `MySQL` 数据库之上开发应用的经验, 请学习课程 201.1, 201.3 和 201.5。

## 子课程简介
+ 课程 201.1: TiDB 的架构特点 - `(Introduction to TiDB Architecture)`
  + 介绍 TiDB 数据库的主要组件: PD、TiKV 和 TiDB 的作用; 理解 Raft 算法对 TiKV 和 PD 组件的重要性; 理解行记录转换为 TiKV 键值对的原理以及 MVCC 的重要性; TiDB 的分布式 SQL; 与传统的非分布式数据库相比, TiDB 的特点。
+ 课程 201.2: TiDB SQL 基础 - `(Learn SQL from TiDB)`
  + 您将掌握 TiDB 的数据类型与表达式，学会使用函数和 `SELECT` 执行中诸如 `Join` 和 `Subquery` 等操作。
+ 课程 201.3: TiDB DDL 与事务控制 - `(TiDB DDL and Transaction Control)`
  + 您将使用 `DDL` 语句对 TiDB 的表和索引进行管理，理解 TiDB 特有的属性以及选项的意义，比如: `AUTO_RANDOM`、`SHARD_BITS` 等；掌握悲观锁和乐观的区别及其行为。了解事务控制语句对事务的影响。
+ 课程 201.4: TiDB 的连接器接口 - `(Developing with Connectors)`
  + 通过使用 Java 和 Python 的数据库连接器接口，连接到 TiDB 数据库，并通过使用 Java 和 Python 以编程的形式执行 SQL 对 TiDB 数据库进行查询与修改数据。
+ 课程 201.5: 总结最佳实践 - `(Best Practices for Developing on TiDB)`
  + 汇总或复习课程中涉及的所有最佳实践，包括: 客户端数据库连接的配置、异常处理方式、事务使用建议、字段属性与表选项的设置、SQL 写作的规范、批处理的利用，等等。

## 课程大纲
+ 课程 201.1: TiDB 的架构特点 
  + 课程导航
  + 章节 01: TiDB 集群的架构与特点
+ 课程 201.2: TiDB SQL 基础
  + 课程导航
  + 章节 02: 查询数据
  + 章节 03: 数据类型与表达式
  + 章节 04: 函数与表达式
  + 章节 05: 表联接 - `Joins`
  + 章节 06: 子查询 - `Subquery`
+ 课程 201.3: TiDB DDL 与事务控制
  + 课程导航
  + 章节 07: 表和索引的 `DDL`
  + 章节 08: `DML` 与 `TiDB` 事务控制
+ 课程 201.4: TiDB 的连接器接口
  + 课程导航
  + 章节 09: 使用数据库连接器 - `Connector API`
  + 章节 10: 使用预编译语句与批处理
  + 章节 11: 在程序中处理异常
+ 课程 201.5: 总结最佳实践
  + 课程导航
  + 章节 12: 最佳实践总结

## 参考与引用
+ [TiDB 文档](https://docs.pingcap.com/tidb)
+ [MySQL 文档](https://dev.mysql.com/doc)

## 知识点索引
| 知识点 | 章节 |
| :---        |    :----   |
| _tidb_rowid | 07 |
| ANSI_QUOTES | 03 11 |
| AUTO_INCREMENT | 07 08 |
| AUTO_RANDOM | 07 |
| Batch | 12 |
| CAST | 03 04 |
| 窗口函数 | 04 |
| Collation | 03 |
| Connector/J | 09 10 11 12 |
| Connector/Python | 09 10 11 |
| ERROR_FOR_DIVISION_BY_ZERO | 04 11 |
| 悲观锁 | 08 |
| 表达式下推 | 04 |
| 定点数 | 03 |
| 分页 | 02 |
| 浮点数 | 03 |
| 隔离级别 | 01 08 |
| JDBC | 09 10 11 12 |
| 聚簇索引 | 07 |
| LAST_INSERT_ID() | 07 10 |
| 乐观锁 | 08 |
| 集合运算 | 05 |
| ONLY_FULL_GROUP_BY | 04 11 |
| PIPES_AS_CONCAT | 04 11 |
| Python | 09 10 11 |
| 日期格式 | 04 |
| 闪回 | 07 |
| 事务控制 | 08 |
| 相关子查询 | 06 |
| 游标 | 09 10 |
| 预编译语句 | 08 12 |
| 整体架构 | 01 |
| 执行计划 | 01 02 04 06 12 |
| 主键 | 01 02 03 07 08 12 |
| 自动提交 | 08 |
| sql_mode | 03 04 11 |
| SHARD | 07 08 10 |
| StreamingResult | 12 |
| 唯一键 | 02 07 |
| 最佳场景 | 12 |
| 最佳实践 | 05 12 |