新書推薦:
《
台北人(2024版)
》
售價:NT$
398.0
《
让孩子更有力量:赋权型家庭教育指南
》
售價:NT$
305.0
《
白夜追凶(上下)
》
售價:NT$
500.0
《
财富、战争与智慧——二战股市风云录
》
售價:NT$
602.0
《
低空经济:中国经济发展新引擎
》
售價:NT$
403.0
《
汉字学理与小学汉字教学
》
售價:NT$
408.0
《
即将到来的能源战争
》
售價:NT$
407.0
《
时刻人文·臆造南洋:马来半岛的神鬼人兽
》
售價:NT$
296.0
|
編輯推薦: |
随着MySQL受欢迎程度的提高,关于如何通过MySQL解决具体问题的疑问越来越多,这本书也应运而生。当需要快速的解决方案或技术时,这本手册里的资源可以为没有时间从头解决MySQL问题的程序员或专家提供大量简短且重点突出的代码、数百个完整的示例,以及清晰简明的解说。“本书是一本真正的经典之作,也是长期以来*秀的MySQL案例集。书中涵盖了初学者所需的基础知识,同时也为高级用户呈现了MySQL的*发展。书中丰富的技巧对MySQL专业人士来说更是难能可贵。”——Ulf WendelMySQL高级软件工程师,mysqlnd PHP库合伙创始人
|
內容簡介: |
本书主要面向数据库初学者和专家,以及Web开发人员,经过更新后涵盖了MySQL*版的强大功能。本书侧重于使用Python、PHP、Java、Perl和Ruby的API进行编程。本书包含两百多个技巧,你可以从中学习:使用mysql客户端,编写基于MySQL的程序。建表、加载数据,以及从表中选择数据。存储、获取和处理字符串。使用日期和时间。排序查询结果,生成汇总信息。使用存储例程、触发器和计划事件。导入、导出、验证,以及重新格式化数据。执行事务,统计应用。处理Web输入,根据查询结果生成Web网页。使用MySQL进行Web会话管理。安全防范和服务器管理。
|
關於作者: |
Paul DuBois是著名的“MySQL Reference Manual”的主要贡献者之一,多年来这本手册一直给予了MySQL管理员和数据库开发人员很大的支持。他是Oracle公司负责MySQL文档团队的成员,还著有《MySQL》等其他著作。
|
目錄:
|
目录前言1第1章 客户端程序mysql.171.0 概述171.1 设置MySQL用户账号181.2 创建数据库和示例表201.3 找不到mysql221.4 指定mysql的命令选项241.5 以交互的方式执行SQL语句291.6 执行从文件或程序中读取的SQL语句311.7 控制mysql输出的路径和格式.331.8 在SQL语句中使用用户定义的变量.39第2章 编写基于MySQL的程序.422.0 概述422.1 连接数据库与断开连接452.2 检查错误592.3 编写库文件.672.4 执行语句并获取结果812.5 处理语句中的特殊字符和NULL值962.6 处理标识符中的特殊字符1052.7 识别结果集中的NULL值1072.8 获取连接参数.1112.9 结论和建议120第3章 从表中查询数据.1213.0 概述.1213.1 指定查询的行与列.1223.2 指定查询结果中列的别名1243.3 查询结果排序.1283.4 过滤重复行1293.5 处理NULL值.1313.6 在程序中比较NULL值.1333.7 通过视图简化查询.1343.8 多表查询.1353.9 截取查询结果的开头、末尾或中间部分1373.10 当LIMIT要求“错误”的排序时该怎么办1413.11 利用表达式计算LIMIT值.142第4章 表管理1444.0 概述.1444.1 克隆表1444.2 将查询结果保存到表中.1454.3 创建临时表1484.4 生成唯一的表名1504.5 检查或更改表的存储引擎1524.6 通过mysqldump复制表.153第5章 字符串1565.0 概述.1565.1 字符串的属性.1575.2 字符串的数据类型.1615.3 设置客户端连接的字符集1635.4 字符串字面量的定义1655.5 检查或更改字符串的字符集或排序规则1675.6 转换字符串的大小写1705.7 控制字符串比较中的大小写敏感度1725.8 利用SQL模式进行模式匹配1755.9 使用正则表达式进行模式匹配1785.10 分割或连接字符串1825.11 搜索子字符串1855.12 设置MySQL用户账号.1865.13 用短语进行全文检索1915.14 全文检索中必须出现或禁止出现的词1935.15 全文检索的词组查找194第6章 日期与时间1966.0 概述.1966.1 选择时间数据类型.1976.2 使用小数秒支持1996.3 更改MySQL的日期格式.2006.4 设置客户端时区2046.5 切换日期时间值的时区.2066.6 获取当前的日期或时间.2076.7 使用TIMESTAMP或DATETIME追踪行的修改时间.2086.8 提取日期或时间值的各部分2116.9 合成日期或时间值.2166.10 时间值和基本单位之间的转换.2186.11 计算日期或时间之间的间隔2226.12 日期或时间值的加法运算.2276.13 计算年龄2326.14 查询一个月的第一天、最后一天或当月的天数2346.15 通过子字符串替换来计算日期.2366.16 计算星期2386.17 查询某周中某天的日期2386.18 计算闰年2416.19 规范化非ISO格式的日期字符串2456.20 基于时间特征的查询246第7章 查询结果的排序.2507.0 概述.2507.1 通过ORDER BY对查询结果排序2517.2 利用表达式进行排序2557.3 查询结果中不包含排序列2567.4 控制字符串排序的大小写区分2607.5 日期排序.2637.6 利用列值的子字符串排序2677.7 利用固定长度的子字符串排序2687.8 利用可变长度的子字符串排序2717.9 按域名顺序排列主机名.2767.10 按数字顺序排序用点分割的IP值2787.11 将值移动到排序结果的开头或最后.2817.12 自定义排序2847.13 枚举值的排序285第8章 汇总数据2898.0 概述.2898.1 基本的汇总技巧2918.2 通过创建视图简化汇总.2988.3 查找与最小值和最大值相关的值2988.4 控制MIN和MAX是否区分字符串大小写3008.5 按子群汇总3028.6 汇总与NULL值3068.7 仅选择具有特定特征的组3098.8 通过计数来确定值是否唯一3108.9 按表达式结果分组.3118.10 汇总非分类数据3128.11 查找最小或最大的汇总值.3158.12 基于日期的汇总3178.13 同时使用分组和总体的汇总值.3198.14 生成包含汇总和列表的报告322第9章 存储例程,触发器和计划事件3269.0 概述.3269.1 创建复合语句对象.3299.2 利用存储函数封装计算.3319.3 通过存储过程返回多个值3339.4 利用触发器动态设置列的默认值3349.5 利用触发器模拟基于函数的索引3369.6 在其他日期和时间类型中模拟TIMESTAMP属性3399.7 利用触发器记录变更3419.8 使用事件来计划数据库操作3449.9 编写辅助例程动态执行SQL3469.10. 处理存储程序中的错误.3479.11 利用触发器预处理或拒绝数据.351第10章 元数据.35410.0 概述.35410.1 获取受语句影响的行数35610.2 获取结果集的元数据35910.3 确认语句是否会生成结果集36910.4 使用元数据来格式化查询输出.36910.5 查看数据库和表或检查其存在性37310.6 访问列的定义37510.7 获取ENUM和SET列的信息38010.8 获取服务器的元数据38210.9 编写适合MySQL服务器版本的应用程序.383第11章 导入和导出数据38611.0 概述.38611.1 使用LOAD DATA和mysqlimport导入数据39011.2 导入CSV文件40111.3 导出MySQL的查询结果40211.4 导入和导出NULL值.40411.5 编写数据导出程序40611.6 数据文件格式的转换41111.7 提取并重新排列数据文件的列.41211.8 MySQL和Microsoft Excel之间的数据交换41511.9 以XML的格式导出查询结果41711.10 将XML导入到MySQL中42011.11 猜测数据文件中的表结构.423第12章 验证与格式化数据42712.0 概述.42712.1 通过SQL模式拒绝错误的输入值.42812.2 验证和转换数据43012.3 使用模式匹配来验证数据.43312.4 使用模式匹配广泛的内容类型.43612.5 使用模式匹配数字值43612.6 使用模式匹配日期或时间.43812.7 使用模式匹配电子邮件地址或URL44212.8 使用表的元数据验证数据.44312.9 使用查找表验证数据44712.10 将两位数的年份值转换成四位数的形式44912.11 检查日期或时间各部分的有效性45112.12 编写处理日期的工具程序.45312.13 导入非ISO格式的日期值.45912.14 使用非ISO格式导出日期.46012.15 后记461第13章 序列.46313.0 概述.46313.1 创建自增列并生成序列值.46413.2 序列的定义46713.3 行的删除对序列造成的影响46913.4 设置MySQL用户账号.47113.5 重新编号现有的序列47513.6 扩展序列的范围47713.7 重用序列的最大值47813.8 按特定的顺序给行重新编号47913.9 添加序列48013.10 同时管理多个自动增加的值48113.11 通过自动增量值关联表48213.12 将序列作为计数器48513.13 生成重复序列488第14章 连接与子查询49014.0 概述.49014.1 表之间的结合49114.2 查找表之间不匹配的行49914.3 识别并删除不匹配或独立存在的行.50414.4 表的自我比较50714.5 生成主从复合结构列表和汇总.51114.6 列举多对多的关系51514.7 查找每组的最小值或最大值51814.8 利用连接填充或找出列表中的缺口.52114.9 利用Join控制查询的排序52414.10 在程序中引用连接输出的列名.526第15章 统计技术52815.0 概述.52815.1 计算描述性统计52915.2 分组描述性统计53315.3 生成频率分布53415.4 统计缺失的值53715.5 计算线性回归或相关系数.54015.6 生成随机数54215.7 随机排序54415.8 随机选择数据54715.9 计算相邻两行之差54815.10 查找累积总和与移动平均值55115.11 指定排名55515.12 计算团队排名559第16章 处理重复数据56516.0 概述.56516.1 防止表中出现重复数据56616.2 处理重复的加载数据56816.3 识别与统计重复数据的数量57216.4 移除表中的重复数据576第17章 事务处理58117.0 概述.58117.1 选择事务存储引擎58217.2 使用SQL执行事务58317.3 在程序内执行事务58517.4 Perl程序中的事务处理.58717.5 Ruby程序中的事务处理.58917.6 PHP程序中的事务处理59017.7 Python程序中的事务处理59117.8 Java程序中的事务处理592第18章MySQL的Web应用简介59318.0 概述.59318.1 生成网页的基本方法59418.2 通过Apache运行Web脚本59718.3 通过Tomcat运行Web脚本60718.4 编码Web输出中的特殊字符612第19章 根据查询结果生成网页的内容62119.0 概述.62119.1 根据查询结果显示段落62219.2 根据查询结果显示列表62419.3 根据查询结果显示表格63519.4 根据查询结果显示超链接.64019.5 根据数据库的内容创建导航索引64319.6 存储图像或其他二进制数据64919.7 提供图像或其他二进制数据65619.8 提供横幅广告65919.9 提供查询结果的下载661第20章 利用MySQL处理Web输入66420.0 概述.66420.1 编写生成Web表单的脚本.66720.2 根据数据库的内容创建单选表单元素67020.3 根据数据库内容创建多选的表单元素68620.4 将数据库内容加载到表单中69220.5 收集Web输入69720.6 验证Web输入70720.7 将Web输入存储到数据库.70820.8 处理文件上传71120.9 基于Web的数据库搜索71820.10 生成上下页的链接72120.11 生成点击标题排序的表格.72620.12 网页的访问次数.73020.13 记录网页的访问日志.73420.14 利用MySQL记录Apache的日志735第21章 基于MySQL的Web会话管理74321.0 概述.74321.1 在Perl应用程序中使用基于MySQL的会话.74621.2 在Ruby应用程序中使用基于MySQL的存储75221.3 在PHP会话管理器中使用基于MySQL的存储75621.4 利用MySQL与Tomcat存储会话信息766第22章 服务器管理77522.0 概述.77522.1 配置服务器77522.2 管理插件接口77822.3 控制服务器的日志记录78022.4 日志文件的轮转与淘汰78422.5 轮转日志表或淘汰日志表的记录78622.6 监控MySQL服务器78722.7 备份的创建和使用799第23章 数据库的安全80123.0 概述.80123.1 了解mysql.user表.80223.2 管理用户账号80323.3 密码策略80823.4 检查密码强度81023.5 密码过期81123.6 设置新密码81323.7 重置过期密码81323.8 查找并修复不安全的账号.81423.9 禁止账号使用MySQL 4.1之前的密码81823.10 查找并删除匿名账号.81923.11 修改“任何主机”和“多个主机”的账号820
|
內容試閱:
|
MySQL数据库管理系统很受欢迎,原因有很多,例如速度快、易于设置、使用和管理,可以在各种版本的UNIX和Windows下运行,基于MySQL的程序可以用多种语言编写。随着MySQL流行度的提高,用户常有如何解决特定问题的疑问,为他们做解答的需求也应运而生。这便是本书的主旨所在:当使用MySQL遇到特定类型的问题需要攻克时,你可以把本书当作一本唾手可得的资料,从中找到快速的解决方案或技术。因为本书是一本手册,所以理所当然提供了很多案例:你可以直接遵循书中的说明,而无需从头开发自己的代码。本书的编写采用了问题-解决方案的格式,非常实用,且内容易于阅读和理解。书中包含很多小节,每个小节都描写了如何编写一个查询语句、应用一项技术或开发一段脚本来解决特定范围内的一个问题。本书不会教你开发成熟复杂的应用程序,但它可以帮助你解决在开发自己的应用程序时遇到的实际困难。例如,很常见的一个问题是,“在编写查询语句时,如何处理数据值中出现的引号和特殊字符?”这其实并不难,但当你不确定应该从何入手时就会感到沮丧。本书演示了解决问题的方法,它揭示了从哪里开始及如何继续。这些知识可以反复为你提供帮助,因为在掌握了解决方法后,你可以将该技术应用到任何类型的数据,例如文本、图像、声音或视频剪辑、新闻文章、压缩文件或PDF文档等。另一个常见问题是,“我可以同时访问多个表的数据吗?”答案是“可以”,这很容易做到,因为你只需要了解正确的SQL语法。但是,只有看到本书中的示例,你才能清楚地知道做法。你可以从本书中学到的其他技巧,包括:? 如何使用SQL来查询、排序和汇总行。? 如何查找表之间的匹配或不匹配。? 如何执行事务。? 如何计算日期或时间之间的间隔,包括年龄计算。? 如何识别或移除重复的行。? 如何正确使用LOAD DATA读取数据文件或查找文件中的非法值。? 如何通过严格模式来防止将错误的数据输入到数据库。? 如何生成序列号并用作唯一的行标识符。? 如何将视图当作“虚拟表”使用。? 如何编写存储过程和函数;如何设置触发器,并在插入或更新表的行时激活触发器,以便执行特定的数据处理操作;如何使用事件调度程序按计划运行查询。? 如何根据数据库的内容生成网页。? 如何管理用户账号。? 如何控制服务器日志。了解如何使用MySQL的其中一个方面是了解如何与服务器通信,即如何使用SQL——结构化查询语言。因此,本书的一个重点就是使用SQL来编写回答特定类型问题的查询。学习和使用SQL的一个有用工具是mysql客户端程序,随本书一起发行的MySQL包中有该程序。你可以在交互式的模式下使用该客户端将SQL语句发送到服务器并查看结果。这非常便利,因为它提供了SQL的直接接口。实际上,我们将在第1章专门讨论客户端程序mysql。但是,仅仅能够执行SQL查询还不够。通常从数据库提取的信息需要进一步的处理,或者以特定的方式呈现。如果查询语句间有复杂的相互关系,例如当需要根据一个查询的结果来执行其他查询时,该怎么办?如果你需要生成一份具有特定格式要求的专业报告时,该怎么办?这些问题是本书的另一个重点:如何通过应用程序编程接口(API)编写与MySQL服务器交互的程序。在掌握了如何在编程语言的上下文中使用MySQL后,你就可以通过以下方式开发MySQL的功能:? 可以先将查询结果保存起来,然后再重复使用。? 可以充分利用通用编程语言的功能,根据查询成功或失败,以及返回的内容做决定,然后再采取相应的动作。? 可以随心所欲地格式化和显示查询结果。如果你正在编写命令行脚本,则可以生成纯文本。如果是基于Web的脚本,则可以生成HTML表格。如果打算将提取的信息传输到其他系统的应用程序,则可以生成XML格式的数据文件。SQL与通用编程语言的结合可以为执行查询和处理结果提供非常灵活的框架。编程语言提高了执行复杂数据库操作的能力。但这并不意味着这本书很复杂。本书的内容将尽量保持简单,同时展示了如何使用易于理解和掌握的技术来构建小的功能块。你可以自由将这些技术应用到自己的程序中,并据此构建任意复杂的应用程序。虽然遗传密码的基础只有四种核酸,但这些基本元素一旦结合到一起,就可以产生我们周围不计其数的生命物种。虽然音阶中只有12个音符,但是经过技艺高超的作曲家之手,将它们交织在一起就可以产生丰富多彩变化无穷的乐曲。同样的道理,在你掌握了一系列简单的案例后,发挥你的想象力,将它们应用到你想要解决的数据库编程问题上,即使你创建的应用程序不是艺术作品,但也肯定会非常有用,而且还会帮助你和其他人提高工作效率。本书面向的读者群对于所有想使用MySQL的人来说,本书都很有用,包括想在个人项目(例如博客或维基)中使用数据库的个人,以及专业数据库和Web开发人员。本书也适用那些目前没有使用MySQL但有此意向的人。例如,如果你想学习数据库,但是觉得Oracle等大型数据库系统可能有点令人生畏,那么MySQL就很适合你(也许不应该这么说。因为Oracle在2010年买下了MySQL,现在是本书作者的老板)。如果你对MySQL很陌生,那么你会在本书中找到许多新颖的使用方法。如果你有使用MySQL的经验,那么你可能很熟悉书里提出的许多问题,但是以前你可能没有必要去解决它们,而现在有了这本书就可以大大节省时间。你可以利用书中给出的案例,将它们应用到自己的程序中,从而避免从头开始编写代码。本书的内容涵盖了从入门到高级的各个方面,所以如果某一个案例中描述的技术对你来说太过于简单,那么可以直接跳过。相反,如果你无法理解某一个案例,那么可以先放在一边,等稍后阅读了其他一些案例后再回过头来看。本书主要内容很可能当你阅读本书的时候,正在尝试开发应用程序,但不确定如何实现其中的某些部分。在这种情况下,你已经清楚需要解决的问题类型,所以可以查看目录或索引,找到能够教你解决问题的相应章节。理想情况下,这些章节的内容会完全符合你的想法。如果不是,那么你可以根据手头的问题,通过调整某个案例来解决类似的问题。我会解释每种技术所涉及的原则,所以你可以按照应用程序的特定需求进行修改。阅读本书的另一种方法是,你并没有特别的问题,但是仍然可以通读本书。这样做可以让你更全面地了解MySQL的功能,因此我建议你偶尔翻阅一下本书。如果你能够了解本书中讲解的问题,那么它可以成为一个更高效的工具。随着深入后面的章节,有时你会发现这些章节使用了前面章节所介绍的技术。在同一章中亦是如此,后面的小节经常会用到前面小节介绍过的技术。如果你翻开某一章,发现某一节用到的技术你并不熟悉,那么可以查看目录,找到介绍了该技术的小节。例如,如果案例中用到了你不熟悉的ORDERBY子句对查询结果进行排序,那么你可以回到第7章,阅读有关各种排序的方法及对它们工作原理的讨论。下面是每章的概述,希望能让你对本书的内容有大致的了解。第1章,客户端程序mysql。本章介绍了如何使用标准的MySQL命令行客户端。mysql通常是人们使用MySQL时,第一个会想到的也是最主要的接口,所以了解如何使用它的功能非常重要。通过该应用程序,你能够以交互的方式执行查询并查看结果,因此在快速实践中非常有用。你也可以在批处理模式下利用它来执行封装好的SQL脚本,或将它的输出发送到其他程序。除此之外,本章还讨论了其他使用mysql的方法,例如如何增强输出的可读性以及生成不同格式的输出等。第2章,编写基于MySQL的程序。本章演示了MySQL编程的基本要素:如何连接到服务器、发起查询、获取结果,以及处理错误。本章还讨论了如何在查询中处理特殊字符和NULL值,如何编写库文件来封装常用操作的代码,以及收集连接到服务器所需参数的各种方法。第3章,从表中查询数据。SELECT语句是从MySQL服务器检索数据的主要手段,本章涵盖了SELECT语句的几个方面:指定检索的列与行,处理NULL值,以及选择查询结果的某一部分。后面的章节将更详细地介绍其中的一些主题,本章概述了它们的基本概念。如果你需要了解有关行选择方面的背景介绍,或者对SQL知识了解不多,那么应该仔细阅读本章。第4章,表管理。本章介绍了表的克隆,将结果复制到其他表、使用临时表,以及检查或更改表的存储引擎。第5章,字符串。本章介绍了如何处理字符串数据。本章涵盖了字符集和排序规则、字符串比较、处理区分大小写的问题、模式匹配、拆分和组合字符串,以及执行全文搜索。第6章,日期与时间。本章介绍了如何使用时间数据。本章描述了MySQL的日期格式以及如何按照其他格式显示日期值。本章还介绍了如何使用MySQL特殊的TIMESTAMP数据类型,如何设置时区,如何在不同时间单位之间进行转换,如何执行时间间隔的计算或根据一个日期生成另一个日期,以及如何执行闰年计算。第7章,查询结果的排序。本章描述了如何按所需的顺序排列查询结果的行。包括指定排序方向、处理NULL值、字符串大小写的处理,以及按整个日期值或部分日期值进行排序。本章还提供了一些示例,说明如何对特殊类型的值进行排序,例如域名、IP地址和ENUM值。第8章,汇总数据。本章介绍了评估一组数据的一般特征的技术,例如数量或最小值、最大值和平均值。第9章,存储例程,触发器和计划事件。本章描述了如何编写存储在服务器端的存储函数和过程,在修改表时激活的触发器,以及按计划执行的事件。第10章,元数据。本章讨论了如何获取有关查询返回的数据的信息,例如结果中的行数或列数,或每列的名称和数据类型。本章还介绍了如何查看MySQL中可用的数据库和表,或查看表的结构。第11章,导入和导出数据。本章介绍了如何在MySQL和其他程序之间传递信息。包括如何使用LOADDATA,将文件从一种格式转换为另一种格式,以及确定适合数据集的表结构。第12章,验证与格式化数据。本章描述了如何提取或重新排列数据文件中的列,检查和验证数据,以及重新格式化值,例如常常会以各种格式出现的日期。第13章,序列。本章讨论了AUTO_INCREMENT列,MySQL生成序列号的机制。本章介绍了如何生成新的序列值或获取最新值、如何重新排序列,以及如何使用序列生成计数器。本章还介绍了如何使用AUTO_INCREMENT值来维护表之间的主从关系,包括需要避免的陷阱。第14章,连接与子查询。本章介绍了如何执行从多个表中选择行的操作。本章演示了如何通过比较表查找匹配或不匹配的数据,生成主从关系的列表和汇总信息,以及枚举多对多的关系。第15章,统计技术。本章说明了如何生成描述性统计,频率分布,回归和相关性。本章还介绍了如何随机化一组行或从集合中随机选择行。第16章,处理重复数据。讨论了如何识别,统计和移除重复的行,以及如何防止重复数据的发生。第17章,事务处理。本章介绍了如何处理必须作为一个整体一起执行的多个SQL语句。本章讨论了如何控制MySQL的自动提交模式以及如何提交或回滚事务。第18章,MySQL的Web应用简介。本章介绍了如何编写基于Web的MySQL脚本。Web编程可以根据数据库的内容生成动态的页面,或收集信息并存储到数据库中。本章讨论了如何为运行Perl、Ruby、PHP和Python脚本而配置Apache,以及如何为了运行用JSP编写的Java脚本而配置Tomcat。第19章,根据查询结果生成网页的内容。本章演示了如何利用查询结果生成各种HTML结构,例如段落、列表、表格、超链接和导航索引。本章还描述了如何将图像存储到MySQL中以供以后检索和显示,以及如何生成可下载的结果集。第20章,利用MySQL处理Web输入。本章讨论了如何通过Web获取用户的输入,并利用输入来创建新的数据库行或作为执行搜索的基础。本章主要介绍了表单处理,包括如何根据数据库中包含的信息构建表单元素,例如单选按钮、弹出菜单或复选框。第21章,基于MySQL的Web会话管理。本章描述了如何在编写的应用程序内使用MySQL作为后备存储,并在多个请求间传递信息。如果你需要分阶段收集信息,或者根据先前的用户操作做出决策,那么本章的内容会非常有帮助行。第22章,服务器管理。本章主要面向的是数据库管理员。本章的内容包括服务器配置、插件接口、日志管理、服务器监控和备份。第23章,数据库的安全。本章也是有关管理员的知识。本章讨论了用户账号管理,包括创建账号、设置密码和分配权限。本章还介绍了如何实施密码策略、查找和修复不安全的账号,以及作废密码和重置过期的密码。本书使用的MySQL API很多语言都有MySQL的编程接口,包括C、C ++、Eiffel、Go、Java、Perl、PHP、Python、Ruby和Tcl。因此,对作者而言,编写一本MySQL图书是一项很大的挑战。无疑书中的各个小节都应该提供可以利用MySQL实现的许多有趣且有用的事情,但是本书应该使用哪个或哪些API呢?如果每个案例都用每一种语言实现一遍,那么结果要么是书中涵盖的案例太少,要么是书的内容膨胀到非常大!而且如果用不同的语言来实现,那么会造成大量冗余,因为各个语言之间有很多相似之处。另一方面,用多个语言实现也是很值得的,因为往往在解决特定的问题时,使用某种语言可能比另一种更合适。为了解决这个两难的局面,作者在本书中挑选了以下几个API来编写各个案例。这样既保证了范围的可控性,同时又允许读者从多个API中进行选择:? Perl和Ruby:使用DBI模块。? PHP:使用PDO扩展。? Python:使用MySQL ConnectorPython驱动程序作为DB API。? Java:使用MySQLConnectorJ驱动程序作为JDBC接口。为何选择了这些语言?选择Perl和PHP的理由很明显。因为Perl是一种使用很广泛的语言,它有自己的一些优势,例如文本处理功能等。特别是用它编写MySQL程序非常流行。Ruby有一个很好用的数据库访问模块,有点像Perl的模块。PHP的应用非常广泛,尤其是在Web上。PHP的优势之一是可以轻松地用它来访问数据库,所以自然成了MySQL脚本的首选。 在MySQL编程方面,Python和Java可能不如Perl或PHP那么流行,但这两种语言都有大量的关注者。特别是在Java社区,MySQL在开发者中拥有很大一批追随者,他们使用JSP(JavaServer Pages)技术构建数据库支持的Web应用程序。我相信这些语言合在一起反映了MySQL程序员现有的大部分用户群。如果你更喜欢一些本书中没有介绍的语言,那么请注意阅读第2章,熟悉本书中主要介绍的API。了解如何使用本书中介绍的编程接口执行数据库操作,可以帮助你用其他语言实现这些案例。版本和平台说明本书中开发的代码是在MySQL 5.5、5.6和5.7下进行的。由于MySQL会定期添加新功能,所以有些示例不能在旧版本中使用。例如,MySQL 5.5引入了身份验证插件,而MySQL 5.6为DATETIME数据类型引入了TIMESTAMP的自动初始化和自动更新属性。假定你使用的不是UNIX,尽管这是我自己喜欢的开发平台(在本书中,“UNIX”也指类似UNIX的系统,如Linux和Mac OS X)。本书中的大多数内容都适用UNIX和Windows。排版约定本书使用了下述排版约定。等宽字体(Constant Width)表示程序列表,以及在段落内部引用程序元素,例如变量或函数名、数据库、数据类型、环境变量、语句和关键字。等宽粗体字(Constant Width bold)表示运行命令时你需要键入的文本。斜体等宽字体(Constant Width Italic)表示变量输入,应该替换成用户提供的值。斜体(Italic)表示URL、主机名、目录和文件名、UNIX命令和选项、程序,偶尔用于强调。命令常和提示符一起出现以表明使用它们的上下文。从命令行发出的命令以%提示符表示:% chmod 600 my.cnf该提示符是UNIX用户常见的,但并不表示该命令只能在UNIX下使用。除非另有说明,否则通常以%提示符表示的命令也可以在Windows下运行。如果你需要在UNIX下以root用户的身份执行一条命令,那么需要将提示符换为#:# perl -MCPAN -e shellWindows下特有的命令以C:\提示符表示:C:\ "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql"从mysql客户端程序中发出的SQL语句以mysql提示符显示,并以分号结束:mysqlSELECT * FROM my_table;如下所示,对于使用mysql时看到的查询结果,有时我会截断输出,并通过省略号来表示结果中还包含没有显示出来的行。以下查询生成了许多行的输出,中间一部分被省略了:mysql SELECT name, abbrev FROM states ORDER BY name;+----------------+--------+| name | abbrev |+----------------+--------+| Alabama | AL || Alaska | AK || Arizona | AZ |…| West Virginia | WV || Wisconsin | WI || Wyoming | WY |+----------------+--------+有些示例仅显示了SQL语句的语法,没有包含mysql提示符,但它们确实包含了分号以明确语句的结束位置。例如,以下是一条语句:CREATE TABLE t1 i INTSELECT * FROM t2;但如下示例代表两条语句:CREATE TABLE t1 i INT;SELECT * FROM t2;分号在mysql是语句结束符的符号。但它并不属于SQL语句本身,因此如果你从编写的程序(例如Perl或Java)中发起SQL语句时,不需要包含末尾的分号。本书的网站本书有一个网站,你可以从中获取本书、勘误表和辅助文档中介绍的示例的源代码和示例数据。地址为:http:www.kitebird.commysql-cookbook。该网站还提供了本书的在线试读部分,因此你可以从浏览器上阅览。源代码和数据本书中的示例所涉及的源代码和示例数据分别来自两个名为recipes和mcb-kjv的发行包。recipes包主要是示例的源代码,本书各个地方都有对它的引用。这个包以压缩的TAR文件(recipes.tar.gz)或ZIP文件(recipes.zip)的形式提供。经过解压后,两种形式都会创建名为recipes的目录。通过recipes包可以节省大量的输入。例如,当你在书中看到描述数据库表结构的CREATE TABLE语句时,通常都可以在tables目录中找到SQL批处理文件,你可以利用它建表,就无需手动输入表的定义了。你可以进入tables目录,然后执行以下命令,其中filename是包含了CREATE TABLE语句的文件名:% mysql cookbook install DBIcpan install DBD::mysql如果最后一个命令遭遇失败,那么可以使用forceinstallDBD::mysql。在Windows版的ActiveState Perl下,你需要使用ppm工具:C:\ppmppm install DBIppm install DBD-mysql你还可以通过CPAN shell或ppm来安装本书中提到的其他Perl模块。安装好DBI和DBD :: mysql模块以后,可以从命令行获取文档:% perldoc DBI% perldoc DBI::FAQ% perldoc DBD::mysql你也可以从Perl网站上获得文档,地址为:https:dbi.perl.org。Ruby支持你可以从Ruby网站上获取Ruby的发行包和文档,地址为:http:www.ruby-lang.orgen。Ruby DBI和MySQL驱动程序模块可从RubyGems上获取;MySQL的Ruby DBI驱动程序需要mysql-ruby模块,该模块也可以从RubyGems上获取。RubyGems的地址为:https:rubygems.org。如果想使用第21章中介绍的会话支持,你需要mysql-session包。你可以从前面提到的本书网站上获得。获取mysql-session包后,你需要解压,然后将mysqlstore.rb和sqlthrow.rb文件安装在Ruby解释器在查找库文件时会搜索的文件夹中(请参见2.3节)。PHP支持你可以从PHP网站上获取PHP的发行包和文档,包括PDO文档,地址为:http:www.php.net。PHP源代码发行版包括了PDO支持,因此无需单独获取。但是,你必须在配置时启用MySQL的PDO支持。如果你使用的是二进制发行包,那么需要确保其中包含PDO MySQL支持。Python支持你可以从Python网站上获取Python的发行包和文档,地址为:https:www.python.org。DB API数据库访问接口的常规文档在Python Wiki上,地址为:https:wiki.python.orgmoinDatabaseProgramming。驱动程序模块MySQL ConnectorPython提供了连接MySQL的DB API,其发行包和文档可以分别通过以下地址获取:http:bit.lypyconnect和http:bit.lypy-dev-guide。Java支持你需要一个Java编译器来构建和运行Java程序,而javac和jikes是两种可供你选择的编译器。许多系统都已安装其中一个系统,或两个系统都安装好了。如若不然,你可以将编译器作为Java Development Kit(JDK)的一部分。如果系统上未安装JDK,则可以从Oracle的Java网站上获取Solaris、Linux和Windows的版本。这个网站还提供了JDBC、servlet、JavaServer Pages(JSP)和JSP标准标记库(JSTL)的文档(包括规范),地址为:https:www.oracle.comtechnetworkjavaindex.html。驱动程序MySQL ConnectorJ提供了连接MySQL的JDBC接口,其发行包和文档可以分别通过以下地址获取:http:bit.lyjconn-dl和http:bit.lyj-dev-guide。使用代码示例本书旨在帮助你完成工作。一般来说,你可以在自己的程序或者文档中使用本书附带的示例代码。你无需联系我们获得使用许可,除非你要复制大量的代码。例如,使用本书中的多个代码片段编写程序就无需获得许可。但以CD-ROM的形式销售或者分发O’Reilly书中的示例代码则需要获得许可。回答问题时援引本书内容及书中示例代码,无需获得许可。在你自己的项目文档中使用本书大量的示例代码时,则需要获得许可。我们不强制要求署名,但如果你这么做,我们深表感激。署名一般包括书名、作者、出版社和国际标准图书编号。例如:“MySQL Cookbook, Third Edition by Paul DuBois O’Reilly. Copyright 2014 Paul DuBois, 978-1-449-37402-0。”如果你觉得自身情况不在合理使用或上述允许的范围内,请通过邮件和我们联系:permissions@oreilly.com。Safari?Books OnlineSafari Books Online(http:safaribooksonline.com)是一个应需而变的数字图书馆,它同时以图书和视频的形式出版世界顶级技术和商务作家的专业作品。Safari Books Online是技术专家、软件开发人员、Web设计师、商务人士和创意人士开展调研、解决问题、学习和认证培训的第一手资料来源。Safari Books Online为企业、政府部门、教育机构和个人提供了多种套餐和价格。订阅者可以在一个完全可搜索的全文数据库中访问上千种图书、培训视频和正式出版之前的书稿。这些内容由以下出版社提供:O’Reilly Media、Prentice Hall Professional、AddisonWesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley&Sons、Syngress、Morgan Kauf-mann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones& Bartlett、Course Technology等。关于Safari Books Online的更多信息,请访问我们的网站(https:www.safaribooksonline.com)。联系我们请把你对本书的意见和疑问发给出版社:美国:O’Reilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中国:北京市西城区西直门南大街2号成铭大厦C座807室(100035)奥莱利技术咨询(北京)有限公司这本书有专属网页,你可以在那儿找到本书的勘误、示例和其他信息。这个网页的地址是http:bit.lymysql_ckbk_3e。如果你对本书有一些评论或技术上的建议,请发送电子邮件到bookquestions@oreilly.com。如果想了解O’Reilly的图书、培训课程、会议和新闻的更多信息,请访问我们的网站:http:www.oreilly.com。我们的Facebook:http:facebook.comoreilly。我们的Twitter:http:twitter.comoreillymedia。我们的Youtube:http:www.youtube.comoreillymedia。致谢感谢每一位读者,谢谢你们阅读本书。我希望这本书能给你带来帮助,也希望你能从中找到有用的信息。谢谢我的技术评审员Johannes Schlüter、Geert Vanderkelen和Ulf Wendel。他们提出了很多指正和建议,从各个方面提高了本书的创作,我深深地感谢他们的帮助。Andy Oram鼓动我写了本书的第三版,而且他也承担了本书的编者,Nicole Shelby将这本书推向了产品,Kim Cofer承担了本书的校对工作,而Lucie Haskins提供了本书英文原版书的索引。谢谢我的妻子Karen,她在写作过程中给予我的鼓励和支持让我感激不尽。
|
|