前 言
MySQL是一个广受Linux社区人们喜爱的半商业的数据库。MySQL是可运行在大多数的Linux平台(i386,Sparc,etc),以及少许非Linux甚至非Unix平台。
MySQL的普及很大程度上源于它的宽松,除了略显不寻常的许可费用。MySQL的价格随平台和安装方式变化。MySQL的Windows版本(NT和9X)在任何情况下都不免费,而任何Unix变种(包括Linux)的MySQL如果由用户自己或系统管理员而不是第三方安装则是免费的,第三方安装则必须付许可费。而且现在已经有了符合GPL的MySQL版本。
MySQL具有这样明显的优势,并且由于它优异的性能,MySQL的应用也越来越广泛,使用者也越来越多。但是在市场上,相应的适合培训的教材却屈指可数,广大爱好者苦于资料的缺乏而无法对MySQL做进一步的了解。为了适应培训市场的需求,本书定位于具有一定计算机知识读者的培训教材。读者在本书中,可以循序渐进的掌握MySQL的安装、使用、管理、备份和安全等多方面的知识。由于内容的翔实和学习内容的由浅入深,本书也适合于个别读者的自学过程。
本书的一大特色是——对于每一项具体的服务器操作,都尽量给出了多种的解决方案。读者既可以学会如何使用MySQL,同时也可以通过这样的安排一窥MySQL的灵活性,并且可以通过这种举一反三的方法,对MySQL系统有一个非常详尽的了解,也能够加深对培训内容的理解和记忆。
此外,每一章的结束,本书都提出若干思考题,基本上都覆盖了该章的内容,可以用来测试培训的效果,也可以用来读者可以用之检测自己的掌握程度。在正文中的例子,读者也不应该忽视,阅读后建议重复正文中所有的例子,再考虑思考题中的内容。
本书结构的这种安排就是最大限度的满足培训教材的要求,同时为普通读者的阅读创造方便,使本书包含较大的信息量。在通读本书之后,相信读者可以对MySQL有了很深的了解,可以独立的对MySQL数据库系统进行管理。
编者时间仓促,难免在文中有疏漏之处,如果给您的阅读造成困难,请谅解。
编著者
内 容 提 要
本书详细介绍了如何安装、管理、备份、维护和优化一个MySQL系统。对于每一件服务器操作都提出了多种的解决方案。对于每一种的方法,虽然不一定都是非常实用的方法,读者能通过这些方法,熟悉MySQL的特点和强大的功能。
第一章简单介绍了MySQL的历史、特点,同时对SQL的语法进行了简单的介绍。如果读者对第一章的内容不能很好的掌握,可以略过不了解的内容,在阅读二、三章之后重新理解其中内容。第二章介绍了如何安装一个MySQL系统。第三、四章详细叙述了如何利用SQL语言以及其它的客户工具对MySQL数据库中的数据进行操作。第五、六章介绍了数据库目录以及如何备份、恢复和维护数据库安装。第七章介绍了MySQL权限系统和如何为数据库创建、撤销授权。第八章则对优化数据库性能的各个方面进行了阐述。
附录一中详细列出了MySQL列类型、函数和SQL语句的参考。附录二全面介绍了本书出现的程序的全部选项及其含义。
目 录
第一章MySQL入门与初步................................................................................... 1
1.1 MySQL简介... 2
1.1.1 MySQL是什么?. 2
1.1.2 我需要MySQL吗?. 3
1.1.3 我需要付钱吗?. 4
1.1.4 如何得到MySQL?. 4
1.1.5总结... 5
1.2 关系数据库管理系统... 5
1.2.1 关系数据库系统... 6
1.2.2 数据库系统的发展... 7
1.2.3 与数据库系统通讯... 8
1.2.4 MySQL的体系结构... 8
1.2.5总结... 8
1.3 MySQL使用的SQL语言... 9
1.3.1 表、列和数据类型... 9
1.3.2函数... 9
1.3.3 SQL的语句... 9
1.3.4总结... 10
1.4 MySQL数据处理... 10
1.4.1 MySQL的数据... 10
1.4.1.1、字符串值... 10
1.4.1.2数字值... 11
1.4.1.3十六进制值... 12
1.4.1.4日期和时间值... 12
1.4.1.4 NULL值... 12
1.4.2列类型概述... 12
1.4.3 数字列类型... 14
1.4.3.1整数类型... 15
1.4.3.2浮点数类型... 16
1.4.4 日期和时间类型... 18
1.4.4.1 Y2K问题和日期类型... 18
1.4.4.2 DATETIME,DATE和TIMESTAMP类型... 18
1.4.4.3 TIME类型... 19
1.4.4.4 YEAR类型... 20
1.4.5 字符串类型... 20
1.4.5.1 CHAR和VARCHAR类型... 21
1.4.5.2 BLOB和TEXT类型... 23
1.4.5.3 ENUM和SET类型... 24
1.4.6总结... 26
第二章 MySQL的安装 27
2.1 MySQL系统的安装布局... 28
2.1.1 二进制安装... 28
2.1.2 RPM安装... 28
2.1.3 源代码安装... 28
2.1.4总结... 29
2.2 安装MySQL系统的分发... 29
2.2.1 在Windows下的安装一个二进制分装... 29
2.2.2 在Windows NT/2000下安装成系统服务... 29
2.2.3 在Linux下安装一个RPM分发... 31
2.2.4 在Linux下安装二进制分发... 31
2.2.5 在Linux下安装源代码分发... 32
2.2.6 总结... 32
2.3 安装后期的的设置与测试... 33
2.3.1建立启动MySQL的帐户... 33
2.3.2 初始化授权表... 33
2.3.3 测试服务器是否工作... 34
2.3.4 自动运行和停止MySQL. 36
2.3.5 更改root用户的密码... 38
2.3.6 修改选项文件... 38
2.3.7总结... 41
2.4 系统的升级... 41
2.4.1 备份数据库与其他配置文件... 41
2.4.2 重新安装二进制分发... 41
2.4.3重新安装源代码分发... 41
2.4.4 升级一个RPM分发... 42
2.4.5 检查数据库是否工作及完整... 42
2.4.6总结... 42
2.5在同一台机器上运行多个MySQL服务器... 42
2.5.1使用重新编译的方法... 42
2.5.2使用指定服务器参数的方法... 43
2.5.3有关选项文件的问题... 44
2.5.4 总结... 44
第三章 数据库的基本操作.............................................................................. 46
3.1 MySQL的启动与终止... 47
3.1.1 直接运行守护程序... 47
3.1.2 使用脚本mysql.server启动关闭数据库... 48
3.1.3 使用mysqladmin实用程序关闭、重启数据库... 49
3.1.4 启动或停止NT平台上的系统服务... 50
3.1.5 使用选项文件提供服务器的参数... 51
3.1.6 总结... 51
3.2 MySQL与客户机的连接... 51
3.2.1建立和中止与服务器的连接... 52
3.2.2利用选项文件简化连接... 53
3.2.3 利用 mysql 的输入行编辑器... 54
3.2.4 批处理模式连接... 55
3.2.5 总结... 56
3.3 有关数据库的操作... 56
3.3.1 用SHOW显示已有的数据库... 56
3.3.2 用Create Dabase 创建数据库... 57
3.3.3 用DROP DATABASE删除数据库... 57
3.3.4 使用mysqladmin工具创建和删除... 58
3.3.5 直接在数据库目录中创建或删除... 58
3.3.6 用USE选用数据库... 58
3.3.7 总结... 58
3.4 有关数据表的操作... 59
3.4.1 用SHOW/ DESCRIBE语句显示数据表的信息... 59
3.4.2 使用mysqlshow 工具得到信息... 60
3.4.3 用Create Table 语句创建数据表... 60
3.4.4利用 SELECT 的结果创建表... 62
3.4.5 用Alter Table语句修改表的结构... 63
3.4.6 用DROP Table 语句删除数据表... 64
3.4.7 总结... 64
3.5 向数据表插入行记录... 64
3.5.1 使用insert语句插入新数据... 64
3.5.2 使用Insert…Select语句插入从其他表选择的行... 65
3.5.3 使用replace、replace…select语句插入... 66
3.5.4 使用LOAD语句批量录入数据... 66
3.5.5 总结... 68
3.6 查询数据表中的记录... 69
3.6.1 普通查询... 69
3.6.2 条件查询... 71
3.6.3 查询排序... 73
3.6.4 查询分组与行计数... 75
3.6.5 查询多个表... 77
3.3.6总结... 78
3.7 修改、删除数据记录... 79
3.7.1 用update修改记录... 79
3.7.2 用delete删除记录... 79
3.7.3 总结... 79
第四章 MYSQL高级特性............................................................................... 81
4.1 集合函数... 82
4.1.1 行列计数... 82
4.1.2统计字段值的数目... 82
4.1.3 计算字段的平均值... 83
4.1.4 计算字段值的和... 84
4.1.5 计算字段值的极值... 84
4.1.6 总结... 86
4.2 操作日期和时间... 86
4.2.1 返回当前日期和时间... 86
4.2.2 自动记录数据的改变时间... 88
4.2.3 返回日期和时间范围... 90
4.2.5 比较日期和时间... 92
4.3 字符串模式匹配... 93
4.3.1 标准的SQL模式匹配... 93
4.3.2 扩展正则表达式模式匹配... 94
4.3.3 总结... 96
4.4 深入select的查询功能... 96
4.4.1 列和表的别名... 96
4.4.1.1列的别名... 96
4.4.1.2 在子句中使用列的别名... 98
4.4.1.3表的别名... 98
4.4.2 取出互不相同的记录... 99
4.4.3 NULL值的问题... 100
4.4.4 大小写敏感性... 102
4.4.5 检索语句与多个表的连接... 102
4.4.5.1 全连接... 103
4.4.5.2 左连接... 105
4.4.6 总结... 108
4.5 索引属性... 108
4.5.1 索引的特点... 108
4.5.2 用Alter Table语句创建与删除索引... 109
4.5.3 用CREATE\DROP INDEX创建索引... 110
4.5.4 在创建表时指定索引... 111
4.5.5 总结... 113
第五章 数据库的备份与恢复 114
5.1 数据库目录... 115
5.1.1 数据目录的位置... 115
5.1.2 数据库的表示法... 116
5.1.3 数据库表的表示法... 117
5.1.4 MySQL的状态文件... 118
5.1.5 总结... 120
5.2 重定位数据库目录的内容... 120
5.2.3 重定位方法... 120
5.2.1 重定位数据目录... 121
5.2.2 重定位数据库... 121
5.2.3 重定位数据库表... 122
5.2.4 重定位状态文件... 122
5.2.5 总结... 123
5.3 备份和恢复数据表的方法... 123
5.3.1 使用SQL语句备份和恢复... 123
5.3.2使用mysqlimport恢复数据... 125
5.3.3 使用mysqldump备份数据... 126
5.3.4 用直接拷贝的方法备份恢复... 129
5.3.5 总结... 129
5.4 使用更新日志文件... 130
5.4.1 启用日志... 130
5.4.2 重写日志... 130
5.4.3 恢复日志内容... 130
5.4.4 总结... 131
5.5 使用MySQL内建复制功能... 131
5.5.1 配置主服务器... 131
5.5.2 配置从服务器... 132
5.5.3 创建相互的主从关系... 133
5.5.4 总结... 133
5.5 总结:备份恢复数据的一般步骤... 133
第六章 数据库的维护与修复......................................................................... 136
6.1 数据库表的检查、修复与优化... 137
6.1.1 数据库表的维护工具... 137
6.1.2 检查数据库表... 138
6.1.3 修复数据库表... 139
6.1.4优化数据库表... 140
6.1.5指定维护过程中使用的内存... 141
6.1.6总结... 141
6.2 避免与 MySQL 服务器交互作用... 142
6.2.1锁定表的的方法... 142
6.2.2 检查表的锁定协议... 143
6.2.3 修复表的锁定协议... 143
6.2.4 总结... 144
6.3日志文件维护... 144
6.3.1如何使用新的更新日志... 144
6.3.2如何使用新的常规日志... 145
6.3.3 总结... 145
6.4 建立日常维护规范... 145
6.4.1 建立一个数据库表维护规范... 145
6.4.2 创建一个适用于定期维护的脚本... 145
6.4.3 在unix中用cron定期检查表... 146
6.3.4 在系统启动期间检查表... 147
6.3.5 总结... 148
第七章 数据库安全....................................................................................... 149
7.1 MySQL的权限系统... 150
7.1.1授权表的结构... 150
7.1.1.1授权表user、db和host的结构和作用... 150
7.1.1.2授权表tables_priv和columns_priv的结构和作用... 151
7.1.2用户的权限... 152
7.1.2.1数据库和表的权限... 152
7.1.2.2管理权限... 153
7.1.3授权表列的内容... 153
7.1.3.1作用域列内容... 153
7.1.3.2授权表User、Db和Host的权限列的内容... 155
7.1.3.3授权表tables_priv和columns_priv的权限列的内容... 155
7.1.4权限系统工作原理... 155
7.1.4.1权限系统工作的一般过程... 155
7.1.4.2存取控制, 阶段1:连接证实... 156
7.1.4.3存取控制,阶段2:请求证实... 159
7.1.5 总结... 161
7.2 设置用户与并授权... 162
7.2.1使用SHOW GRANTS语句显示用户的授权... 162
7.2.2 使用grant语句创建用户并授权... 162
7.2.2.1 GRANT语句的语法... 162
7.2.2.2创建用户并授权的实例... 164
7.2.3 直接修改授权表创建用户并授权... 164
7.2.4 总结... 165
7.3 撤销用户与授权... 165
7.3.1 使用revoke语句撤销授权... 165
7.3.2 直接修改授权表撤销用户或授权... 166
7.3.3 总结... 167
7.4 设置密码... 167
7.4.1 使用myadmin实用程序... 167
7.4.2使用语句SET PASSWORD.. 168
7.4.3 直接修改授权表... 168
7.4.4 重新设置一个遗忘的root口令... 168
7.4.5 总结... 169
7.5 权限修改何时生效... 169
7.5.1 服务器重新启动的情况... 170
7.5.2 被服务器立即应用的情况... 170
7.5.3 直接修改授权表的情况... 170
7.5.4 对现有客户连接的影响情况... 170
7.5.5 总结... 170
7.6 授权原则... 170
7.6.1 只有root用户拥有授权表的改写权... 170
7.6.2 关于用户、口令及主机的设置... 171
7.6.3 授予用户合适的权限... 171
7.6.4 MySQL权限系统无法完成的任务... 173
7.6.5 总结... 173
7.7 MySQL的其它安全问题... 173
7.7.1 不在客户机的命令行上提供密码... 173
1可以在命令行上提供密码... 173
7.7.2 使用SSH加密客户机连接... 174
7.7.3不要使用Unix的root用户运行MySQL守护进程... 174
7.7.4数据库目录的安全... 174
7.7.4.1可能的安全漏洞... 174
7.7.4.2在Unix设置合适的数据库目录权限... 175
7.7.4.3在NT系统中设置合适的数据库目录权限... 175
7.7.5影响安全的mysqld选项... 175
7.7.6 总结... 176
第八章 数据库优化....................................................................................... 177
8.1 索引的使用... 178
8.1.1索引对单个表查询的影响... 178
8.1.2索引对多个表查询的影响... 180
8.1.3多列索引对查询的影响... 181
8.1.4索引的作用... 182
8.1.5 索引的弊端... 182
8.1.6 选择索引的准则... 183
8.1.7 总结... 184
8.2 数据类型的问题... 184
8.2.1 有助于效率的类型选择... 184
8.2.2 有关BLOB和TEXT类型... 185
8.2.3 使用ANALYSE过程检查表列... 186
8.2.3 总结... 187
8.3 SQL查询的优化... 187
8.3.1 使用EXPLAIN语句检查SQL语句... 187
8.3.2 SELECT 查询的速度... 188
8.3.2.1 MySQL怎样优化WHERE子句... 188
8.3.2.2 MySQL怎样优化LEFT JOIN.. 190
8.3.2.3 MySQL怎样优化LIMIT. 190
8.3.4 记录转载和修改的速度... 191
8.3.4.1 INSERT查询的速度... 191
8.3.4.2 UPDATE查询的速度... 193
8.3.4.3 DELETE查询的速度... 193
8.3.4索引对有效装载数据的影响... 193
8.3.5 总结... 194
8.4 数据库表的处理... 194
8.4.1 选择一种表类型... 194
8.4.1.1 静态(定长)表的特点... 195
8.4.1.2 动态表的特点... 196
8.4.1.3 压缩表的特点... 196
8.4.1.4 内存表的特点... 197
8.4.2 数据库表的数量的问题... 197
8.4.3 数据库表级锁定的问题... 198
1、对此一个主要的问题如下:... 198
2、INSERT DELAYED 在客户机方的作用... 199
8.4.4 对表进行优化... 200
8.4.5 总结... 201
8.5 服务器级优化... 201
8.5.1 磁盘问题... 201
8.5.2硬件问题... 202
8.5.3 服务器参数的选择... 202
8.5.4编译和链接怎样影响MySQL的速度... 203
8.5.5 总结... 203
思考题答案.................................................................................................... 206
附录一 MySQL 语言参考.............................................................................. 217
1.1 数据类型参考:怎么写字符串和数字... 217
1.1.1 字符串... 217
1.1.2 数字... 219
1.1.3 十六进制值... 219
1.1.4 NULL值... 219
1.1.5 数据库、表、索引、列和别名的命名... 220
1.1.5.1 名字的大小写敏感性... 221
1.2 用户变量... 222
1.3 列类型... 222
1.3.1 列类型存储需求... 225
数字类型... 226
日期和时间类型... 226
串类型... 226
1.3.2 数字类型... 227
1.3.3 日期和时间类型... 229
1.3.3.1 Y2K问题和日期类型... 230
1.3.3.2 DATETIME, DATE和TIMESTAMP类型... 230
1.3.3.3 TIME类型... 233
1.3.3.4 YEAR类型... 234
1.3.4 字符串类型... 234
1.3.4.1 CHAR和VARCHAR类型... 234
1.3.4.2 BLOB和TEXT类型... 235
1.3.4.3 ENUM类型... 236
1.3.4.4 SET类型... 237
1.3.5 为列选择正确的类型... 238
1.3.6 列索引... 238
1.3.7 多列索引... 239
1.3.8 使用来自其他数据库引擎的列类型... 239
1.4 用在SELECT和WHERE子句中的函数... 240
1.4.1 分组函数... 240
1.4.2 常用的算术操作... 241
1.4.3 位函数... 242
1.4.4 逻辑运算... 242
1.4.5 比较运算符... 243
1.4.6 字符串比较函数... 246
1.4.7 类型转换运算符... 248
1.4.8 控制流函数... 248
1.4.9 数学函数... 249
1.4.10 字符串函数... 255
1.4.11 日期和时间函数... 262
1.4.12 其他函数... 269
1.4.13 与GROUP BY子句一起使用的函数... 272
1.5 CREATE DATABASE句法... 274
1.6 DROP DATABASE句法... 274
1.7 CREATE TABLE句法... 274
1.1.1 隐含的列说明改变... 279
1.8 ALTER TABLE句法... 280
1.9 OPTIMIZE TABLE句法... 282
1.10 DROP TABLE句法... 283
1.11 DELETE句法... 283
1.12 SELECT句法... 284
1.13 JOIN句法... 286
1.14 INSERT句法... 287
1.15 REPLACE句法... 290
1.16 LOAD DATA INFILE句法... 291
1.17 UPDATE句法... 296
1.18 USE句法... 297
1.20 KILL句法... 298
1.22 EXPLAIN句法(得到关于SELECT的信息) 303
1.23 DESCRIBE句法 (得到列的信息)... 307
1.24 LOCK TABLES/UNLOCK TABLES句法... 308
1.25 SET OPTION句法... 309
1.26 GRANT和REVOKE句法... 310
1.27 CREATE INDEX句法... 313
1.29 注释句法... 314
1.30 CREATE FUNCTION/DROP FUNCTION句法... 315
2.1 各种MySQL程序概述... 318
myisamchk. 318
make_binary_release. 318
msql2mysql 318
mysql 318
mysqlaccess 319
mysqladmin. 319
mysqlbug. 319
mysqld. 319
mysqldump. 319
mysqlimport 319
mysqlshow.. 319
mysql_install_db. 319
replace. 319
safe_mysqld. 319
2.2 mysqladmin. 319
2.3 mysqldump. 320
2.4 mysqlimport. 323
2.5 myisampack. 324
2.6 myisamchk. 332