目 录 第1章 数据库基础 1 1.1 数据库概述 1 1.1.1 数据库技术的发展 1 1.1.2 数据库系统的组成 2 1.1.3 数据模型与规范化 2 1.1.4 结构化查询语言(SQL) 7 1.2 数据库的体系结构 7 1.2.1 数据库三级模式 8 1.2.2 三级模式之间的映射 8 1.3 E-R图 9 1.3.1 实体和属性 9 1.3.2 关系 10 1.3.3 E-R图设计原则 10 1.4 数据库设计 11 1.4.1 为实体建立数据表 11 1.4.2 为表建立主键和外键 11 1.4.3 为多对多关系建立数据表 12 1.4.4 为字段选择合适的数据类型 12 1.4.5 定义约束条件 13 1.5 本章小结 13 1.6 思考与练习 14 第2章 初识MySQL 15 2.1 MySQL概述 15 2.1.1 MySQL的发展史 15 2.1.2 MySQL的优势 16 2.1.3 MySQL的应用环境 16 2.1.4 MySQL 8.0的新特性 17 2.2 Windows平台下安装与 配置MySQL 18 2.2.1 MySQL服务器安装包的下载 18 2.2.2 MySQL服务器的安装 20 2.3 启动服务器并登录MySQL 服务器 28 2.3.1 配置Path变量 28 2.3.2 启动和停止MySQL 30 2.3.3 连接和断开MySQL 31 2.3.4 打开MySQL 8.0 Command Line Client 32 2.4 Linux平台下安装和配置MySQL 32 2.4.1 下载并安装MySQL 33 2.4.2 通过apt安装MySQL服务 34 2.5 如何学好MySQL 35 2.6 本章小结 36 2.7 思考与练习 36 第3章 MySQL图形化管理工具 37 3.1 MySQL图形化管理工具概述 37 3.2 phpMyAdmin 37 3.2.1 phpMyAdmin简介 37 3.2.2 安装phpStudy 38 3.2.3 下载phpMyAdmin 38 3.2.4 打开phpMyAdmin 39 3.2.5 数据库操作管理 40 3.2.6 管理数据表 42 3.2.7 管理数据记录 44 3.2.8 导入/导出数据 48 3.2.9 设置编码格式 49 3.2.10 添加服务器用户 50 3.2.11 重置MySQL服务器登录密码 52 3.3 Navicat 53 3.3.1 下载Navicat 53 3.3.2 安装Navicat 54 3.3.3 服务器连接 56 3.3.4 创建数据库 57 3.3.5 新建数据表 58 3.3.6 添加数据记录 60 3.3.7 导出/导入数据 60 3.3.8 “工具”菜单 62 3.4 本章小结 70 3.5 思考与练习 70 第4章 数据库操作 71 4.1 关系数据库简介 71 4.1.1 关系数据库基础知识 71 4.1.2 数据库常用对象 72 4.1.3 系统数据库 72 4.2 操作数据库 73 4.2.1 创建数据库 73 4.2.2 查看数据库 76 4.2.3 选择数据库 77 4.2.4 修改数据库 77 4.2.5 删除数据库 78 4.3 存储引擎 79 4.3.1 MySQL存储引擎的概念 79 4.3.2 MySQL支持的存储引擎 80 4.3.3 InnoDB存储引擎 81 4.3.4 MyISAM存储引擎 82 4.3.5 MEMORY存储引擎 83 4.3.6 如何选择存储引擎 84 4.3.7 设置存储引擎 84 4.4 本章小结 86 4.5 思考与练习 86 第5章 数据表操作 87 5.1 数据表基本操作 87 5.1.1 创建数据表 87 5.1.2 查看表结构 89 5.1.3 复制数据表 90 5.1.4 修改表结构 92 5.1.5 重命名数据表 95 5.1.6 删除数据表 95 5.2 数据类型 96 5.2.1 数字类型 96 5.2.2 字符串类型 97 5.2.3 日期和时间类型 98 5.2.4 如何选择数据类型 98 5.3 表约束操作 100 5.3.1 设置表字段的非空约束 100 5.3.2 设置表字段的默认值 101 5.3.3 设置表字段的唯一约束 102 5.3.4 设置表字段的主键约束 103 5.3.5 设置表字段值自动增加 105 5.3.6 设置表字段的外键约束 106 5.4 索引操作 108 5.4.1 索引概述 108 5.4.2 创建索引 109 5.4.3 删除索引 111 5.5 本章实战 112 5.6 本章小结 116 5.7 思考与练习 116 第6章 数据记录操作 117 6.1 插入数据记录 117 6.1.1 使用INSERT...VALUES语句 插入单条记录 117 6.1.2 使用INSERT...VALUES语句 插入多条记录 120 6.1.3 使用INSERT...SELECT语句 插入结果集 120 6.1.4 使用REPLACE语句插入新 数据记录 122 6.2 修改数据记录 123 6.3 删除表记录 124 6.3.1 使用DELETE语句删除表记录 124 6.3.2 使用TRUNCATE语句清空表 记录 125 6.4 本章实战 125 6.5 本章小结 129 6.6 思考与练习 129 第7章 数据查询 130 7.1 基本查询 130 7.1.1 SELECT语句 130 7.1.2 查询所有字段 132 7.1.3 查询指定字段 133 7.1.4 查询指定数据 133 7.2 按条件查询 134 7.2.1 带关系运算符的查询 134 7.2.2 带IN关键字的查询 134 7.2.3 带BETWEEN AND关键字的查询 135 7.2.4 空值查询 135 7.2.5 用关键字DISTINCT去除结果中的 重复行 137 7.2.6 带LIKE关键字的查询 138 7.2.7 带AND关键字的多条件查询 138 7.2.8 带OR关键字的多条件查询 139 7.3 高级查询 140 7.3.1 对查询结果排序 140 7.3.2 分组查询 140 7.3.3 使用LIMIT限制查询结果数量 142 7.4 聚合函数查询 142 7.4.1 COUNT函数 142 7.4.2 SUM函数 143 7.4.3 AVG函数 143 7.4.4 MAX函数 144 7.4.5 MIN函数 144 7.5 连接查询 144 7.5.1 内连接查询 144 7.5.2 外连接查询 146 7.5.3 复合条件连接查询 148 7.6 子查询 149 7.6.1 带IN关键字的子查询 149 7.6.2 带比较运算符的子查询 150 7.6.3 带EXISTS关键字的子查询 150 7.6.4 带ANY关键字的子查询 151 7.6.5 带ALL关键字的子查询 152 7.7 合并查询结果 153 7.7.1 使用UNION关键字 153 7.7.2 使用UNION ALL关键字 154 7.8 定义表和字段的别名 154 7.8.1 为表取别名 154 7.8.2 为字段取别名 155 7.9 使用正则表达式查询 155 7.10 本章小结 158 7.11 思考与练习 158 第8章 MySQL函数 159 8.1 MySQL函数简介 159 8.2 数学函数 159 8.3 字符串函数 161 8.4 日期和时间函数 169 8.4.1 获取当前日期的函数和获取当前 时间的函数 169 8.4.2 获取当前日期和时间的函数 169 8.4.3 UNIX时间戳函数 170 8.4.4 返回UTC日期的函数和返回 UTC时间的函数 171 8.4.5 获取月份的函数 171 8.4.6 获取星期的函数 171 8.4.7 获取星期数的函数 172 8.4.8 获取天数的函数 173 8.4.9 获取年份、季度、小时、分钟和 秒钟的函数 174 8.4.10 获取日期的指定值的函数 175 8.4.11 时间和秒钟转换的函数 175 8.4.12 计算日期和时间的函数 176 8.4.13 将日期和时间格式化的函数 178 8.5 条件判断函数 181 8.5.1 IF(expr,v1,v2)函数 181 8.5.2 IFNULL(v1,v2)函数 182 8.5.3 CASE函数 182 8.6 系统信息函数 183 8.6.1 获取MySQL版本号 183 8.6.2 获取用户名的函数 185 8.6.3 获取字符串的字符集和排序 方式的函数 185 8.7 加密函数 186 8.8 窗口函数 187 8.9 MySQL函数的使用示例 188 8.10 本章小结 192 8.11 思考与练习 192 第9章 运算符 193 9.1 运算符概述 193 9.2 算术运算符 194 9.3 比较运算符 196 9.3.1 常用的比较运算符 197 9.3.2 特殊功能的比较运算符 199 9.4 逻辑运算符 203 9.5 位运算符 204 9.6 运算符的优先级 206 9.7 运算符综合示例 207 9.8 本章小结 209 9.9 思考与练习 210 第10章 视图 211 10.1 视图概述 211 10.1.1 视图的含义 211 10.1.2 视图的作用 212 10.2 创建视图 213 10.2.1 创建视图的语法形式 213 10.2.2 在单表上创建视图 214 10.2.3 在多表上创建视图 214 10.3 查看视图 215 10.3.1 使用DESCRIBE语句查看视图的 基本信息 215 10.3.2 使用SHOW TABLE STATUS语句 查看视图的基本信息 216 10.3.3 使用SHOW CREATE VIEW语句 查看视图的详细信息 217 10.3.4 在views表中查看视图的详细 信息 217 10.4 修改视图 218 10.4.1 使用CREATE OR REPLACE VIEW 语句修改视图 218 10.4.2 使用ALTER语句修改视图 218 10.5 更新视图 219 10.6 删除视图 221 10.7 本章实战 221 10.8 本章小结 224 10.9 思考与练习 225 第11章 存储程序 226 11.1 创建、调用存储过程和函数 226 11.1.1 创建和调用存储过程 226 11.1.2 创建和调用存储函数 231 11.1.3 变量的使用 232 11.1.4 定义条件和处理程序 233 11.1.5 光标的使用 236 11.1.6 流程控制的使用 237 11.2 查看存储过程和函数 241 11.2.1 使用SHOW STATUS语句 查看存储过程和函数的状态 241 11.2.2 使用SHOW CREATE语句 查看存储过程和函数的定义 241 11.2.3 从information_schema.Routines表中 查看存储过程和函数的信息 242 11.3 修改存储过程和函数 243 11.4 删除存储过程和函数 244 11.5 MySQL 8.0的全局变量的 持久化 245 11.6 本章小结 246 11.7 思考与练习 246 第12章 触发器 247 12.1 创建触发器 247 12.1.1 创建只有一个执行语句的 触发器 247 12.1.2 创建有多个执行语句的触发器 248 12.2 查看触发器 250 12.2.1 使用SHOW TRIGGERS语句 查看触发器 250 12.2.2 在triggers表中查看触发器信息 252 12.3 触发器的使用 253 12.4 删除触发器 254 12.5 本章实战 254 12.6 本章小结 255 12.7 思考与练习 256 第13章 MySQL权限与安全管理 257 13.1 权限表 257 13.1.1 user表 257 13.1.2 db表 259 13.1.3 tables_priv表和columns_priv表 261 13.1.4 procs_priv表 261 13.2 账户管理 262 13.2.1 登录和退出MySQL服务器 262 13.2.2 新建普通用户 263 13.2.3 删除普通用户 265 13.2.4 root用户修改自己的密码 266 13.2.5 root用户修改普通用户密码 266 13.3 权限管理 267 13.3.1 MySQL的各种权限 267 13.3.2 授权 269 13.3.3 收回权限 271 13.3.4 查看权限 272 13.4 访问控制 273 13.4.1 连接核实阶段 273 13.4.2 请求核实阶段 273 13.5 提升安全性的措施 274 13.5.1 AES 256加密 274 13.5.2 密码到期更换策略 276 13.5.3 安全模式安装 278 13.6 管理角色 278 13.7 本章实战 279 13.8 本章小结 282 13.9 思考与练习 282 第14章 数据备份与恢复 283 14.1 数据备份 283 14.1.1 使用MySQLdump命令备份 283 14.1.2 直接复制整个数据库目录 288 14.1.3 使用MySQLhotcopy工具快速 备份 288 14.2 数据恢复 289 14.2.1 使用MySQL命令恢复 289 14.2.2 直接复制到数据库目录 289 14.2.3 MySQLhotcopy快速恢复 290 14.3 数据库迁移 290 14.3.1 相同版本的MySQL数据库之间的 迁移 290 14.3.2 不同版本的MySQL数据库之间的 迁移 291 14.3.3 不同数据库之间的迁移 291 14.4 表的导出和导入 291 14.4.1 使用SELECT...INTO OUTFILE 导出文本文件 292 14.4.2 使用MySQLdump导出文本 文件 295 14.4.3 使用MySQL导出文本文件 297 14.4.4 使用LOAD DATA INFILE方式 导入文本文件 299 14.4.5 使用MySQLimport导入文本 文件 300 14.5 本章实战 301 14.6 本章小结 305 14.7 思考与练习 305 第15章 MySQL日志 306 15.1 日志简介 306 15.2 二进制日志 307 15.2.1 启动和设置二进制日志 307 15.2.2 查看二进制日志 308 15.2.3 删除二进制日志 309 15.2.4 使用二进制日志恢复数据库 310 15.2.5 暂时停止二进制日志功能 311 15.3 错误日志 311 15.3.1 启动和设置错误日志 311 15.3.2 查看错误日志 312 15.3.3 删除错误日志 312 15.4 通用查询日志 313 15.4.1 启动通用查询日志 313 15.4.2 查看通用查询日志 313 15.4.3 删除通用查询日志 314 15.5 慢查询日志 314 15.5.1 启动和设置慢查询日志 314 15.5.2 查看慢查询日志 315 15.5.3 删除慢查询日志 315 15.6 本章实战 315 15.7 本章小结 321 15.8 思考与练习 321 第16章 性能优化 322 16.1 优化简介 322 16.2 优化查询 323 16.2.1 分析查询语句 323 16.2.2 索引对查询速度的影响 325 16.2.3 使用索引查询 326 16.2.4 优化子查询 328 16.3 优化数据库结构 329 16.3.1 将字段很多的表分解成多个表 329 16.3.2 增加中间表 330 16.3.3 增加冗余字段 331 16.3.4 优化插入记录的速度 331 16.3.5 分析表、检查表和优化表 333 16.4 优化MySQL服务器 335 16.4.1 优化服务器硬件 335 16.4.2 优化MySQL的参数 335 16.5 临时表性能优化 336 16.6 服务器语句超时处理 338 16.7 创建全局通用表空间 338 16.8 本章实战 339 16.9 本章小结 341 16.10 思考与练习 341 第17章 综合项目 342 17.1 图书管理系统 342 17.1.1 需求管理 342 17.1.2 创建数据库 345 17.1.3 图书管理 349 17.1.4 用户信息管理 350 17.1.5 图书借阅管理 351 17.1.6 视图管理 352 17.2 网上购物系统 354 17.2.1 系统功能描述 354 17.2.2 系统功能分析 355 17.2.3 代码实现 357 17.2.4 程序运行 367 17.3 本章小结 369 17.4 思考与练习 369 参考文献 370