具体描述
编辑推荐
也许你未曾意识到,但你时常在与MySQL或其分支打交道。作为高效且稳定的开源数据库,MySQL备受各大电商网站和社会媒体网站青睐。若想快速并深入了解如何使用和维护MySQL,本书便是**参考。这本注重实践的学习指南以简单明了、条理清晰的方式,教你安装、使用和维护MySQL及其重要分支MariaDB。
本书作者既是MySQL与MariaDB专家,也是小说家。他以生动的语言和翔实的示例分析带你领略数据库设计和数据管理的方方面面。章末精心设计的习题将有助于你温故而知新。
- 创建和修改MySQL表,并在其中声明字段和列。
- 通过示例,掌握数据的插入、选取、更新、删除、连接和子查询。
- 使用字符串函数对列中的文本进行查找、抽取、格式化和转换。
- 学习用于数学或统计运算,以及日期和时间格式化的相关函数。
- 执行管理任务,例如管理账号、备份数据库和批量导入数据。
- 使用PHP等各种编程语言的API连接和查询MySQL或MariaDB。 内容简介
本书使读者不仅能够深入了解MySQL这种主流数据库,还能全面掌握作为开源数据库新秀的MariaDB的使用方法。书中内容由浅至深、层层深入,从分步介绍如何安装MySQL和MariaDB,到以虚构的观鸟网站为例,详解数据库的各种操作。具体内容包括:数据库的结构;数据的插入、选取、更新、删除、连接和子查询;字符串函数、日期和时间函数、聚合函数与数值函数等。后一个部分从更高的角度介绍数据库的管理,内容涉及用户账号及权限、数据库的备份与恢复,以及利用应用编程接口结合C、Perl、PHP、Python、Ruby等不同语言与数据库交互。 作者简介
Russell J.T. Dyer现任MariaDB公司课程主管,同时是一位小说家。他曾在MySQL公司做过近六年的知识库编辑,拥有丰富的MySQL实践经验,另著有《MySQL核心技术手册》。作为小说家,他目前正在创作自己的第二部小说。 目录
目录
序 xiii
前言 xvii
第一部分 软件
第1 章 入门 2
1.1 MySQL 和MariaDB 的价值 2
1.2 邮件列表和论坛 3
1.3 其他书籍和出版物 3
第2 章 安装MySQL 和MariaDB 5
2.1 安装包 5
2.2 许可 6
2.3 获取软件 6
2.4 挑选发行 7
2.5 各种_AMP 8
2.5.1 Linux 二进制发行版 8
2.5.2 Mac OS X 发行版 9
2.5.3 Windows 发行版 12
2.5.4 FreeBSD 和Sun Solaris 发行版 13
2.5.5 源码包 15
2.6 安装后 16
2.6.1 特殊配置 17
2.6.2 给root 设置初始密码 17
2.6.3 关于密码的更多问题,以及删除匿名用户 18
2.6.4 创建用户 19
第3 章 基础知识与mysql客户端 20
3.1 mysql客户端 20
3.2 连接到服务器 21
3.3 开始探索数据库 23
3.3.1 第一条SQL语句 24
3.3.2 插入和操作数据 26
3.3.3 再复杂一点 28
3.4 小结 29
3.5 习题 29
第二部分 数据库结构
第4 章 创建数据库和表 32
4.1 创建数据库 32
4.2 创建表 34
4.3 插入数据 36
4.4 更深入地理解表 37
4.5 小结 40
4.6 习题 40
第5 章 更改表 42
5.1 改表需谨慎 42
5.2 必修的改表技能 43
5.3 选修的改表技能 51
5.3.1 设置列的默认值 51
5.3.2 设置AUTO_INCREMENT 的值 53
5.3.3 改表和建表的另一种方法 54
5.3.4 重命名一个表 56
5.3.5 重排序一个表 57
5.4 索引 58
5.5 小结 62
5.6 习题 62
第三部分 数据处理基础
第6 章 插入数据 67
6.1 语法 67
6.2 实例 68
6.2.1 鸟目表 69
6.2.2 鸟科表 70
6.2.3 鸟种表 75
6.3 其他选择 77
6.3.1 明确插入 77
6.3.2 插入其他表中的数据 77
6.3.3 题外话:设置正确的order_id 79
6.3.4 替换数据 82
6.3.5 数据插入的优先级 83
6.4 小结 85
6.5 习题 86
第7 章 查询数据 88
7.1 基本查询 89
7.2 有条件地查询 89
7.3 结果排序 90
7.4 限定结果集 92
7.5 表连接 92
7.6 表达式与LIKE 94
7.7 对结果集进行计数和分组 98
7.8 小结 100
7.9 习题 100
第8 章 更新和删除数据 102
8.1 更新数据 102
8.1.1 更新指定行 103
8.1.2 按行数更新 106
8.1.3 排序后再按行数更新 107
8.1.4 同时更新多个表 108
8.1.5 处理重复 109
8.2 删除数据 111
8.3 小结 113
8.4 习题 113
第9 章 表连接和子查询 115
9.1 合并结果集 115
9.2 表连接 118
9.2.1 基本的表连接查询 119
9.2.2 更新已连接的表 123
9.2.3 从已连接的表中删除数据 124
9.3 子查询 125
9.3.1 标量子查询 126
9.3.2 列子查询 128
9.3.3 行子查询 129
9.3.4 表子查询 130
9.3.5 子查询的性能考虑 131
9.4 小结 131
9.5 习题 131
第四部分 内置函数
第10 章 字符串函数 134
10.1 格式化字符串 135
10.1.1 拼接字符串 135
10.1.2 设置大小写和引号 137
10.1.3 修剪和补充字符串 137
10.2 抽取文本 139
10.3 搜索字符串及使用长度函数 141
10.3.1 在字符串中找出某段子串的位置 141
10.3.2 字符串长度 143
10.3.3 比较和查找字符串 144
10.3.4 在字符串中替换或插入内容 146
10.4 转换字符串类型 148
10.5 压缩字符串 150
10.6 小结 151
10.7 习题 151
第11章 日期和时间函数 153
11.1 日期和时间的数据类型 153
11.2 当前日期和时间 155
11.3 抽取日期和时间中的某部分 157
11.4 格式化日期和时间 160
11.5 调整格式标准和时区 162
11.6 日期和时间的加减 164
11.7 比较日期和时间 168
11.8 小结 171
11.9 习题 171
第12章 聚合函数和数值函数 173
12.1 聚合函数 173
12.1.1 计数 173
12.1.2 对一组数据进行运算 178
12.1.3 拼接同组的值 182
12.2 数值函数 183
12.2.1 四舍五入 183
12.2.2 上舍入或下舍入 186
12.2.3 截短数字 187
12.2.4 消除负数 187
12.3 小结 189
12.4 习题 189
第五部分 数据库管理
第13章 用户账号和权限 192
13.1 用户账号的基础知识 192
13.2 限制用户账号的访问权限 194
13.2.1 用户名和主机 194
13.2.2 SQL 权限 196
13.2.3 数据库组件和权限 198
13.3 管理员账号 202
13.3.1 用于备份的用户账号 202
13.3.2 用于恢复备份的用户账号 203
13.3.3 用于批量导入的用户账号 203
13.3.4 用于授权的用户账号 204
13.4 回收权限 205
13.5 删除用户账号 206
13.6 更改密码和用户名 207
13.6.1 给用户账号设置密码 207
13.6.2 用户账号重命名 208
13.7 用户角色 209
13.8 小结 211
13.9 习题 211
第14章 数据库的备份与恢复 213
14.1 备份 213
14.1.1 备份所有数据库 214
14.1.2 理解dump 文件 215
14.1.3 备份指定的数据库 220
14.1.4 创建备份脚本 221
14.1.5 备份指定的表 221
14.2 恢复备份 223
14.2.1 恢复数据库 223
14.2.2 恢复表 223
14.2.3 只恢复某些行或列 228
14.2.4 用二进制日志来做恢复 229
14.3 制定备份策略 234
14.4 小结 238
14.5 习题 238
第15章 批量导入数据 240
15.1 准备导入 240
15.2 导入数据的基本做法 243
15.2.1 检查警告信息 243
15.2.2 检查导入是否准确 244
15.2.3 选取导入的数据 246
15.3 更好地导入 248
15.3.1 对应域 248
15.3.2 设置列 249
15.4 其他格式的域和行 250
15.4.1 开始、结束和跳脱 250
15.4.2 替换数据或忽略错误 251
15.5 在MySQL之外导入数据 252
15.5.1 导入本地文件 253
15.5.2 使用mysqlimport 253
15.5.3 没有FILE 权限也能导入数据 254
15.6 批量导出数据 254
15.7 小结 256
15.8 习题 256
第16 章 应用编程接口 258
16.1 创建API用户账号 258
16.2 C API 259
16.2.1 连接MySQL 259
16.2.2 查询MySQL 261
16.2.3 完整的最小C API程序 261
16.2.4 用GNU C编译器编译 262
16.3 Perl DBI 262
16.3.1 安装 263
16.3.2 连接MySQL 263
16.3.3 查询MySQL 263
16.3.4 Perl DBI完整示例 265
16.3.5 更多信息 267
16.4 PHP API 267
16.4.1 安装与配置 267
16.4.2 连接MySQL 268
16.4.3 查询MySQL 268
16.4.4 更多信息 271
16.5 Python 271
16.5.1 安装 271
16.5.2 连接MySQL 271
16.5.3 查询MySQL 272
16.5.4 Python程序示例 273
16.5.5 更多信息 275
16.6 Ruby API 275
16.6.1 安装和准备使用MySQL/Ruby 275
16.6.2 连接MySQL 276
16.6.3 查询MySQL 277
16.6.4 MySQL/Ruby程序示例 277
16.6.5 更多信息 281
16.7 SQL注入 281
16.8 小结 282
16.9 习题 282
关于作者 284
关于封面 284
SQL 核心概念深度解析与实践 本书并非旨在教授具体的数据库产品(如MySQL或MariaDB)的安装、配置或特定版本下的操作细节,而是将焦点放在构成一切关系型数据库系统的基石——SQL(Structured Query Language)语言的底层原理与核心概念上。通过深入剖析SQL的语法结构、数据模型以及查询优化策略,本书旨在帮助读者构建起扎实的SQL功底,使其能够融会贯通,自如地应对市面上几乎所有的关系型数据库系统。 第一部分:关系型数据库模型与SQL基础 本部分将带领读者从零开始,建立起对关系型数据库的直观认知。我们将详细阐述关系型数据库的核心概念,包括: 数据模型:深入理解表(Table)、行(Row)、列(Column)、主键(Primary Key)、外键(Foreign Key)、索引(Index)等基本构成单元。我们将探讨它们之间的关系,以及如何通过合理的模型设计来保证数据的完整性、一致性和高效性。例如,我们将讲解主键如何唯一标识一条记录,外键如何建立表之间的关联,以及不同类型的索引(如B-tree, Hash)如何加速数据检索,并深入分析索引失效的常见原因。 SQL 数据类型:详细介绍SQL中常见的数据类型,如整数类型(INT, SMALLINT, BIGINT)、浮点数类型(FLOAT, DOUBLE)、定点数类型(DECIMAL, NUMERIC)、字符串类型(VARCHAR, CHAR, TEXT)、日期与时间类型(DATE, TIME, DATETIME, TIMESTAMP)以及布尔类型(BOOLEAN, BIT)等。我们将分析不同数据类型的存储特性、精度以及适用场景,指导读者如何选择最适合自身业务需求的数据类型,以优化存储空间和查询性能。例如,我们会讨论在什么情况下应该选择VARCHAR而不是CHAR,或者为何在存储金额时应优先考虑DECIMAL。 SQL 语言基础:系统性地讲解SQL的四大基本操作(CRUD): SELECT:这是SQL中最常用、也最复杂的语句。我们将从最基础的`SELECT FROM table`开始,逐步深入到`WHERE`子句的条件过滤,`ORDER BY`的数据排序,`GROUP BY`的数据聚合,`HAVING`子句对聚合结果的过滤。我们将详细解析各种逻辑运算符(AND, OR, NOT)和比较运算符(=, !=, >, <, >=, <=, BETWEEN, IN, LIKE, IS NULL)的用法,以及正则表达式在`LIKE`操作中的高级应用。 INSERT:学习如何向表中插入单条或多条记录,包括指定列插入和全列插入。我们将重点讲解如何处理插入冲突,以及在批量插入时如何提升效率。 UPDATE:掌握如何修改表中已有的数据,包括更新单条记录和多条记录,以及如何结合`WHERE`子句进行精确更新。我们将探讨更新操作的原子性问题,以及如何避免意外更新大量数据。 DELETE:学习如何从表中删除记录,包括删除单条记录和多条记录,以及如何谨慎使用`DELETE`语句,防止数据丢失。我们会对比`DELETE`和`TRUNCATE TABLE`的区别,并讲解何时使用哪种操作。 SQL 约束:深入理解SQL提供的各种约束,用于保证数据的完整性和准确性。 NOT NULL:确保列不包含NULL值。 UNIQUE:确保列中的所有值都是唯一的。 PRIMARY KEY:定义表的主键,它既是UNIQUE约束又是NOT NULL约束,是唯一标识表中每一行的关键。 FOREIGN KEY:建立表与表之间的引用关系,确保关联数据的一致性。我们将详细讲解外键的引用动作(ON DELETE, ON UPDATE),如CASCADE(级联)、SET NULL(置空)、RESTRICT(限制)和NO ACTION(无动作),并分析它们在实际应用中的影响。 CHECK:定义列值的取值范围或条件。 SQL 运算符与表达式:全面介绍SQL中用于数据处理和条件判断的各类运算符,包括算术运算符(+, -, , /)、比较运算符、逻辑运算符、字符串连接运算符、位运算符以及特殊运算符(如`ALL`, `ANY`, `EXISTS`, `IN`, `LIKE`, `IS NULL`)。我们将通过大量实例讲解这些运算符在`SELECT`, `WHERE`, `HAVING`等子句中的灵活运用。 第二部分:高级SQL查询技术 在本部分,我们将突破基础,进入SQL查询的高级领域,掌握更复杂、更强大的数据处理能力。 SQL 连接(JOIN):这是SQL中最核心、也是最容易混淆的概念之一。我们将逐一深入解析各种JOIN类型: INNER JOIN:返回两个表中匹配的行。 LEFT (OUTER) JOIN:返回左表的所有行,以及右表中匹配的行。 RIGHT (OUTER) JOIN:返回右表的所有行,以及左表中匹配的行。 FULL (OUTER) JOIN:返回两个表中的所有行,如果右表中没有匹配项,则用NULL填充。 CROSS JOIN:返回两个表的笛卡尔积。 我们将通过图示和详细示例,清晰地展示JOIN的工作原理,以及如何根据业务需求选择最合适的JOIN类型。 子查询(Subqueries):学习如何在SQL语句中使用嵌套查询,以及它们在`WHERE`, `FROM`, `SELECT`等子句中的应用。我们将探讨标量子查询、行量子查询、表量子查询,以及它们与JOIN的区别和优劣势。 集合运算符(Set Operators):掌握`UNION`, `UNION ALL`, `INTERSECT`, `EXCEPT`(或`MINUS`)等集合运算符,用于合并、筛选和比较查询结果集。我们将详细说明它们与`JOIN`的区别,以及如何处理重复行。 窗口函数(Window Functions):这是SQL 2003标准引入的一项革命性功能,极大地简化了复杂的分析性查询。我们将深入讲解各种窗口函数,如: 排名函数:`ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`, `NTILE()`,用于为数据集中的每一行分配一个排名。 聚合函数:`SUM()`, `AVG()`, `COUNT()`, `MAX()`, `MIN()`,但与普通聚合函数不同的是,它们在窗口函数中可以作用于一个“窗口”内的行,而不是整个分组。 值函数:`LAG()`, `LEAD()`, `FIRST_VALUE()`, `LAST_VALUE()`,用于访问当前行之外的行值。 我们将详细解释`OVER()`子句的`PARTITION BY`和`ORDER BY`用法,帮助读者理解窗口函数的强大之处,例如如何计算累积总计、移动平均值、每个部门的最高薪资等。 公共表表达式(Common Table Expressions - CTEs):学习如何使用`WITH`子句创建临时的、命名的结果集,以简化复杂的查询结构,提高可读性和可维护性。我们将展示如何使用递归CTE来处理层次化数据。 SQL 视图(Views):理解视图的作用,以及如何创建和使用视图来简化复杂的查询,隐藏底层表的结构,并实现数据访问的安全性。 第三部分:SQL 查询优化与性能调优 掌握SQL的基本语法和高级特性固然重要,但编写高效的SQL语句以保证应用程序的性能同样不可忽视。本部分将聚焦于SQL查询的性能优化。 理解查询执行计划(Execution Plan):我们将介绍如何查看和分析SQL查询的执行计划,了解数据库是如何执行SQL语句的,以及瓶颈可能出现在哪里。我们将重点关注执行计划中的关键信息,如扫描类型(全表扫描、索引扫描)、连接类型(嵌套循环、哈希连接、合并连接)、排序方式等。 索引的深入理解与应用: 索引类型:除了B-tree索引,还将简要介绍Hash索引、全文索引等。 复合索引:讲解多列索引的创建和使用,以及列的顺序对性能的影响。 覆盖索引:理解如何通过索引直接满足查询需求,避免回表查询。 索引优化策略:何时创建索引,何时删除冗余索引,以及如何避免索引失效(如函数索引、LIKE '%...'查询)。 SQL 语句优化技巧: 避免全表扫描:强调使用`WHERE`子句过滤数据,并配合索引。 优化 JOIN 操作:选择合适的JOIN类型,确保JOIN列上有索引。 减少不必要的数据检索:只选择需要的列,避免`SELECT `。 合理使用聚合函数与 GROUP BY:理解聚合函数的计算过程,以及`GROUP BY`和`HAVING`的性能影响。 子查询与 JOIN 的选择:分析在不同场景下,子查询和JOIN的性能差异。 避免使用游标(Cursors):在大多数情况下,SQL的面向集合的特性比游标更高效。 利用数据库提供的优化工具:介绍一些通用的数据库性能调优工具和方法。 事务(Transactions)与并发控制: ACID 属性:深入理解事务的原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),以及它们如何保证数据安全。 隔离级别:讲解SQL标准定义的四种隔离级别(Read Uncommitted, Read Committed, Repeatable Read, Serializable),以及它们带来的现象(脏读、不可重复读、幻读),并指导读者根据业务需求选择合适的隔离级别。 锁机制:简要介绍数据库的锁机制(行锁、表锁、意向锁等)是如何实现并发控制的。 第四部分:SQL 扩展功能与进阶应用 本部分将进一步拓展SQL的应用范围,介绍一些高级功能和在实际开发中经常遇到的场景。 存储过程(Stored Procedures)与函数(Functions):虽然本书不侧重于特定数据库,但我们将介绍存储过程和函数在SQL中的通用概念,它们如何封装业务逻辑,提高代码复用性和性能。 触发器(Triggers):理解触发器的作用,以及如何利用它们在特定事件(INSERT, UPDATE, DELETE)发生时自动执行SQL语句,实现数据验证、审计等功能。 SQL 注入防护:虽然本书不直接讲解编程语言,但理解SQL注入的原理对于编写安全的SQL至关重要。我们将简要介绍SQL注入的常见攻击方式,并给出预防措施(如参数化查询)。 日期与时间处理:深入讲解SQL中日期和时间函数的用法,以及如何进行日期计算、格式化和比较。 字符串处理:掌握各种字符串函数,如`SUBSTRING`, `CONCAT`, `REPLACE`, `TRIM`, `UPPER`, `LOWER`等。 数据转换函数:学习如何使用`CAST`和`CONVERT`函数在不同数据类型之间进行转换。 NULL 值的处理:系统性地讲解`COALESCE`, `NULLIF`等函数,以及在聚合函数和条件判断中如何处理NULL值。 SQL 安全性基础:简要介绍SQL中的用户管理、权限控制等概念,确保数据访问的安全性。 本书的特色与目标读者 本书最大的特点在于其普适性。它不局限于任何一款特定的数据库产品,而是从SQL的底层逻辑出发,为读者构建坚实的理论基础。无论您未来选择MySQL、MariaDB、PostgreSQL、Oracle、SQL Server还是其他关系型数据库,本书所传授的SQL知识都将是您宝贵的财富。 本书适合以下人群: 初学者:希望系统学习SQL基础,并建立牢固概念的编程新手。 开发者:需要提升SQL查询能力,优化数据库交互性能的后端开发者、全栈工程师。 数据分析师:希望深入理解数据查询的原理,掌握更强大的数据处理技巧的分析师。 数据库管理员(DBA):需要巩固SQL基础,理解性能调优原理的DBA。 任何对关系型数据库感兴趣的学习者:希望全面了解SQL语言精髓的读者。 通过本书的学习,您将不仅仅是学会如何编写SQL语句,更重要的是理解SQL的工作机制,掌握优化查询性能的思维方式,从而在面对复杂的数据挑战时,能够游刃有余,事半功倍。