# 第一章 基础教程

这个 MySQL 基础教程解释一些基本的 SQL 语句。 如果这是您第一次使用关系数据库管理系统，本教程将为您提供使用 MySQL 数据库服务器所需的一切内容，例如查询数据，更新数据，管理数据库和创建表。

如果您已经熟悉其他关系数据库管理系统(如 [PostgreSQL](http://www.yiibai.com/postgresql/)，[Oracle ](http://www.studyoracle.cn/)或 Microsoft SQL Server 等)，则可以使用本教程来刷新您的知识，并了解 MySQL 的 SQL 方言与其他数据库系统的不同之处。

## 第 1 节 入门

本节将开始介绍和学习使用 MySQL。我们将开始安装 MySQL，下载[示例数据库](http://www.yiibai.com/mysql/sample-database.html)并将数据导入到 MySQL 服务器以进行练习。

* [安装MySQL数据库服务器](https://github.com/hezhiqiang-log/MySQL-Tutorial-1/tree/36c5cf6f8c14fd8fce9c63a937b8ff66b259a653/%E5%85%A5%E9%97%A8/%E5%AE%89%E8%A3%85.html) - 演示如何在计算机上安装 MySQL 数据库服务器。
* [下载MySQL示例数据库](https://github.com/hezhiqiang-log/MySQL-Tutorial-1/tree/36c5cf6f8c14fd8fce9c63a937b8ff66b259a653/%E5%85%A5%E9%97%A8/%E7%A4%BA%E4%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93.html) - 介绍一个名称为`yiibaidb`的 MySQL 示例数据库，提供下载示例数据库及 ER 图。
* [将示例数据库导入到MySQL数据库服务器中](https://github.com/hezhiqiang-log/MySQL-Tutorial-1/tree/36c5cf6f8c14fd8fce9c63a937b8ff66b259a653/%E5%85%A5%E9%97%A8/%E7%A4%BA%E4%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93.html#%E5%AF%BC%E5%85%A5%E7%A4%BA%E4%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93) - 演示如何将示例数据库 (`yiibaidb`) 导入到 MySQL 数据库服务器中进行练习。

## 第 2 节 查询数据

本节将帮助您了解如何从 MySQL 数据库服务器查询数据。 我们将从一个简单的`SELECT`语句开始，从单个表查询数据。

* [SELECT 语句](http://www.yiibai.com/mysql/select-statement-query-data.html) - 显示如何使用简单的 SELECT 语句来查询单个表中的数据。
* [SELECT DISTINCT 语句](http://www.yiibai.com/mysql/distinct.html) - 了解如何在`SELECT`语句中使用`DISTINCT`运算符来消除结果集中的重复行。

## 第 3 节 过滤数据

* [WHERE](http://www.yiibai.com/mysql/where.html) - 学习如何使用`WHERE`子句根据指定的条件过滤行记录。
* [AND 运算符](http://www.yiibai.com/mysql/and.html) - 介绍如何使用`AND`运算符以组合布尔表达式以形成用于过滤数据的复杂条件。
* [OR 运算符](http://www.yiibai.com/mysql/or.html) - 介绍`OR`运算符，并展示如何将`OR`运算符与`AND`运算符组合以过滤数据。
* [IN 运算符](http://www.yiibai.com/mysql/sql-in.html) - 学习如何在`WHERE`子句中使用`IN`运算符来确定值是否匹配列表或子查询中的指定值。
* [BETWEEN 运算符](http://www.yiibai.com/mysql/between.html) - 显示如何使用`BETWEEN`运算符来根据指定范围查询数据。
* [LIKE](http://www.yiibai.com/mysql/like.html) - 提供基于特定模式匹配查询数据的技术示例，以执行一些模糊查询。
* [LIMIT 子句](http://www.yiibai.com/mysql/limit.html) - 使用`LIMIT`来限制`SELECT`语句返回的行数
* [IS NULL](http://www.yiibai.com/mysql/is-null.html) - 使用`IS NULL`运算符测试值是否为`NULL`。

## 第 4 节 排序数据

* [ORDER BY](http://www.yiibai.com/mysql/order-by.html) - 显示如何使用`ORDER BY`子句排序结果集。还将介绍使用`FIELD`函数的自定义排序顺序。
* [使用 ORDER BY 子句进行自然排序](http://www.yiibai.com/mysql/natural-sorting.html) - 通过使用`ORDER BY`子句，演示 MySQL 中的各种自然排序技术。

## 第 5 节 连接表

* [MySQL 别名](http://www.yiibai.com/mysql/alias.html) - 引入别名，包括表别名和列别名，以提高复杂查询的可读性，并避免在查询具有相同列名称的多个表中的数据时发生歧义错误。
* [INNER JOIN](http://www.yiibai.com/mysql/inner-join.html) - 应用内部联接技术来查询来自多个相关表的数据。
* [LEFT JOIN](http://www.yiibai.com/mysql/left-join.html) - 学习如何使用左连接来生成包含来自连接左侧表中的行的结果集，并使用`NULL`值来补充不匹配行。
* [CROSS JOIN](http://www.yiibai.com/mysql/cross-join.html) - 学习如何使来自多个表的行的笛卡尔乘积。
* [自连接](http://www.yiibai.com/mysql/self-join.html) – 使用表别名将表连接到自身，并使用其他类型的连接(如`INNER JOIN`或`LEFT JOIN`)连接同一表中的行记录。

## 第 6 节 分组数据

* [GROUP BY 子句](http://www.yiibai.com/mysql/group-by.html) - 学习如何根据列或表达式将行记录分组到子组。
* [HAVING 子句](http://www.yiibai.com/mysql/having.html) - 按特定条件过滤组。

## 第 7 节 MySQL 子查询，派生表和通用表达式

* [MySQL 子查询](http://www.yiibai.com/mysql/subquery.html) - 学习如何在另一个查询(外部查询)中嵌套另一个查询语句(内部查询)，并使用内部查询的结果值作为外部查询条件。
* [MySQL 派生表](http://www.yiibai.com/mysql/derived-table.html) - 介绍派生表概念，并演示如何使用它来简化复杂查询。
* [MySQL 通用表表达式](http://www.yiibai.com/mysql/cte.html) - 解释通用表表达式概念，并向您展示如何使用 CTE 查询表中的数据。
* [递归 CTE](http://www.yiibai.com/mysql/recursive-cte.html) - 演示如何使用递归通用表表达式 (CTE) 遍历分层数据。

## 第 8 节 使用 SET 操作符

* [UNION 和 UNION ALL](http://www.yiibai.com/mysql/sql-union-mysql.html) - 使用`UNION`和`UNION ALL`操作符将两个或多个多个`SELECT`语句的结果集合合并到一个结果集中。
* [INTERSECT 模拟](http://www.yiibai.com/mysql/intersect.html) - 显示了几种模拟MySQL中`INTERSECT`运算符的方法。

## 第 9 节 修改 MySQL 中的数据

在本节中，将学习如何使用各种MySQL语句来在表上执行插入，更新和删除数据操作。

* [INSERT 语句](http://www.yiibai.com/mysql/insert-statement.html) - 学习如何使用各种形式的`INSERT`语句将数据插入到数据库表中。
* [INSERT IGNORE](http://www.yiibai.com/mysql/insert-ignore.html) - 解释将数据行插入到表中并忽略导致错误或异常的行的`INSERT IGNORE`语句。
* [UPDATE 语句](http://www.yiibai.com/mysql/update-data.html) - 了解如何使用`UPDATE`语句及其选项来更新数据库表中的数据。
* [UPDATE JOIN 语句](http://www.yiibai.com/mysql/update-join.html) - 显示如何使用带有`INNER JOIN`和`LEFT JOIN`的`UPDATE JOIN`语句执行交叉表更新。
* [DELETE](http://www.yiibai.com/mysql/delete-statement.html) - 学习如何使用`DELETE`语句从一个或多个表中删除数据。
* [ON DELETE CASCADE](http://www.yiibai.com/mysql/on-delete-cascade.html) - 学习如何从父表中删除数据时，使用外部键从`DELETE CASCADE`引用动作删除子表中的数据。
* [DELETE JOIN](http://www.yiibai.com/mysql/delete-join.html) - 学习如何从多个表中删除数据。
* [REPLACE 语句](http://www.yiibai.com/mysql/replace.html) - 学习如何插入或更新数据，这取决于数据是否存在于表中。
* [PREPARE 语句](http://www.yiibai.com/mysql/prepared-statement.html) - 显示如何使用PREPARE语句执行查询。

## 第 10 节 MySQL 事务

* [MySQL事务](http://www.yiibai.com/mysql/transaction.html) - 了解MySQL事务，以及如何使用`COMMIT`和`ROLLBACK`来管理MySQL中的事务。
* [MySQL表锁定](http://www.yiibai.com/mysql/table-locking.html) - 了解如何使用MySQL锁来协调会话之间的表访问。

## 第 11 节 管理 MySQL 数据库和表

本节介绍如何管理 MySQL 中最重要的数据库对象，包括数据库和表。

* [MySQL 数据库管理](http://www.yiibai.com/mysql/create-drop-database.html) - 学习各种语句来管理 MySQL 数据库，包括创建新数据库，删除现有数据库，选择数据库以及列出所有数据库。
* [MySQL 表类型](http://www.yiibai.com/mysql/understand-mysql-table-types-innodb-myisam.html) - 了解每个表类型的功能至关重要，以便您可以有效地使用它们来最大限度地提高数据库的性能。
* [CREATE TABLE](http://www.yiibai.com/mysql/create-table.html) - 学习如何使用`CREATE TABLE`语句在数据库中创建新表。
* [MySQL 序列](http://www.yiibai.com/mysql/sequence.html) - 学习如何使用序列为表的主键列自动生成唯一的数字。
* [ALTER TABLE](http://www.yiibai.com/mysql/alter-table.html) - 学习如何使用`ALTER TABLE`语句来更改现有表的结构。
* [重命名表](http://www.yiibai.com/mysql/rename-table.html) - 演示如何使用`RENAME TABLE`语句重命名表。
* [从表中删除列](http://www.yiibai.com/mysql/drop-column.html) - 学习如何使用`ALTER TABLE DROP COLUMN`语句从表中删除一个或多个列。
* [向表中添加新列](http://www.yiibai.com/mysql/add-column.html) - 学习如何使用`ALTER TABLE ADD COLUMN`语句向现有表添加一个或多个列。
* [删除表](http://www.yiibai.com/mysql/drop-table.html) - 学习如何使用`DROP TABLE`语句删除现有表。
* [MySQL 临时表](http://www.yiibai.com/mysql/temporary-table.html) - 讨论MySQL临时表，并学习如何管理临时表。
* [TRUNCATE TABLE](http://www.yiibai.com/mysql/truncate-table.html) - 学习如何使用`TRUNCATE TABLE`语句删除表中的所有数据。

## 第 12 节 MySQL 索引

* [管理MySQL 数据库索引](http://www.yiibai.com/mysql/create-drop-index.html) - 学习如何使用 MySQL 索引，以及如何利用索引来加快数据检索。
* [MySQL UNIQUE 索引](http://www.yiibai.com/mysql/unique.html) - 显示如何使用`UNIQUE`索引来强制一个或多个列的值的唯一性。

## 第 13 节 MySQL 数据类型

* [MySQL 数据类型](http://www.yiibai.com/mysql/data-types.html) - 学习 MySQL 中的各种数据类型，以便您可以在设计数据库表时有效应用它们。
* [INT](http://www.yiibai.com/mysql/int.html) - 学习如何使用整数数据类型。并演示如何使用`ZEROFILL`和整数列的宽度属性。
* [DECIMAL](http://www.yiibai.com/mysql/decimal.html) - 学习如何使用`DECIMAL`数据类型存储十进制格式的精确值。
* [BIT](http://www.yiibai.com/mysql/bit.html) - 介绍`BIT`数据类型以及如何在 MySQL 中存储位值。
* [BOOLEAN](http://www.yiibai.com/mysql/boolean.html) - 学习 MySQL 如何通过内部使用`TINYINT(1)`来处理布尔值。
* [CHAR](http://www.yiibai.com/mysql/char-data-type.html) - 学习如何使用存储固定长度字符串的`CHAR`数据类型。
* [VARCHAR](http://www.yiibai.com/mysql/varchar.html) - 提供`VARCHAR`数据类型的基本指南。
* [TEXT](http://www.yiibai.com/mysql/text.html) - 演示如何使用`TEXT`数据类型存储文本数据。
* [DATE](http://www.yiibai.com/mysql/date.html) - 介绍DATE数据类型，并显示一些日期功能来有效处理日期数据。
* [TIME](http://www.yiibai.com/mysql/time.html) - 学习`TIME`数据类型的功能，并向您演示如何使用一些有用的时间功能来处理时间数据。
* [DATETIME](http://www.yiibai.com/mysql/datetime.html) - 介绍`DATETIME`数据类型和一些有用的函数来操作日期时间值。
* [TIMESTAMP](http://www.yiibai.com/mysql/timestamp.html) - 介绍`TIMESTAMP`类型及其功能，调用自动初始化和自动更新，允许您为表定义自动初始化和自动更新的列。
* [JSON 格式类型](http://www.yiibai.com/mysql/json.html) - 显示如何使用 JSON 数据类型来存储 JSON 文档。
* [ENUM](http://www.yiibai.com/mysql/enum.html) - 了解如何正确使用`ENUM`数据类型来存储枚举值。

## 第 14 节 MySQL 约束

* [NOT NULL 约束](http://www.yiibai.com/mysql/not-null-constraint.html) - 引入`NOT NULL`约束，并显示如何为列定义`NOT NULL`约束或将`NOT NULL`约束添加到现有列。
* [主键约束](http://www.yiibai.com/mysql/primary-key.html) - 指导如何使用主键约束来创建表的主键。
* [外键约束](http://www.yiibai.com/mysql/foreign-key.html) - 学习外键概念，并逐步显示如何创建和删除外键。
* [UNIQUE 约束](http://www.yiibai.com/mysql/unique-constraint.html) - 显示如何使用`UNIQUE`约束来强制表中列或一组列的值的唯一性。
* [CHECK 约束](http://www.yiibai.com/mysql/check-constraint.html) - 通过各种方式来模拟 MySQL 中的`CHECK`约束。

## 第 15 节 MySQL 全球化

* [MySQL 字符集](http://www.yiibai.com/mysql/character-set.html) - 本教程讨论 MySQL 字符集，并演示如何对字符集执行各种操作。
* [MySQL 排序规则](http://www.yiibai.com/mysql/collation.html) - 本教程讨论了 MySQL 排序规则，并向您展示了如何为 MySQL 服务器，数据库，表和列设置字符集和排序规则。

## 第 16 节 MySQL 导入和导出

* [将 CSV 文件导入 MySQL 表](http://www.yiibai.com/mysql/import-csv-file-mysql-table.html) - 演示如何使用`LOAD DATA INFILE`语句将 CSV文件导入 MySQL 表。
* [MySQL 导出表到 CSV](http://www.yiibai.com/mysql/export-table-to-csv.html) - 学习如何将 MySQL 表导出为 CSV 文件格式的各种技术。
