自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (28)
  • 收藏
  • 关注

原创 CAsynchronismEngine::OnAsynchronismEngineData [ wIdentifier=1 wDataSize=8 ]

本篇文章主要介绍了"CAsynchronismEngine::OnAsynchronismEngineData [ wIdentifier=1 wDataSize=8 ]",主要涉及到CAsynchronismEngine::OnAsynchronismEngineData [ wIdentifier=1 wDataSize=8 ]方面的内容,对于CAsynchronismEngine::On

2015-11-03 14:05:09 1021

原创 CAsynchronismEngine::OnAsynchronismEngineData [ wIdentifier=3 wDataSize=434 ]

网狐CAsynchronismEngine::OnAsynchronismEngineData [ wIdentifier=3 wDataSize=434 ]抛出这个错误除了其它博客上提到的内核版本问题,如果程序中有使用空指针的情况也会提示这个错误,例如如下代码:bool CGameMatchServiceManager::SendMatchInfo(IServerUserItem *

2015-11-03 14:00:01 1546

原创 软件运行在64位win7没有问题,但是在32位win7运行出现BEX错误

软件运行在64位win7没有问题,但是在32位win7运行出现BEX错误:解决办法:参考链接http://zhidao.baidu.com/question/235380934.html你试试看把wow.exe这个文件列入DEP的例外应该就可以了。具体方法如下:打开“计算机-属性-高级系统设置”中的“高级”选项卡,点击“性能”下面的“设置”按钮,切换到“数据执行保护”选项,勾选“

2015-09-14 10:19:21 4230

转载 MultiByteToWideChar和WideCharToMultiByte用法详解

//========================================================================//TITLE://    MultiByteToWideChar和WideCharToMultiByte用法详解//AUTHOR://    norains//DATE://    第一版:Monday  25-Decembe

2015-09-14 10:15:47 351

转载 调测工具VcTester攻略--搭建运行环境

关于VcTester工具VcTester由ezTester公司推出,是业界众多VC调测辅助工具中功能最强悍的一款,为准确起见,我还是加上“之一”后缀,尽管VcTester很强,但仍有适用性限制,并非所有Visual C/C++代码在VcTester中都工作得很好(下面还有介绍),另外,本人尚不清楚今后是否还会冒出比VcTester更强的工具。集众多工具的优势于一身是VcTester一个显著

2015-08-25 10:44:07 1324

转载 VC6使用GDI+的配置方法

刚才下载了一个GDI+库,弄好要编译竟然出错,上网查找了一下相关信息,终于找到解决办法了 1.先下载GDI+库(里面有30个头文件、一个DLL文件、一个LIB文件),解压。 http://download.csdn.net/source/2328958 2.VC6中, Tools --> Options ,选择 Directories 项,填入头文件和LIB文件的地址。

2015-08-07 15:17:43 427

转载 windows驱动开发技术详解 VC6与DDK搭配使用的设置

在《windows驱动开发技术详解》中作者提供了两种调式内核程序的方法,有两种编译驱动的办法,一种是用DDK环境来编译,需要在源代码所在目录下创建两个文件makefile和Sources,另一种为vc搭配DDK使用,但不需要写makefile和source文件,第一种 DDK环境来编译  写好文件,在开始菜单中选择“Windows XP Checked Build Environment”

2015-08-07 15:10:50 2836 1

原创 VS2010编译的程序,在其他电脑上出现“应用程序正常初始化(0xc0150002)失败”问题的解决方案

程序一启动就出现“应用程序正常初始化(0xc0150002)失败”错误。安装VS2010版本的vcredist_x86.exe错误依旧最后安装好.net framework 3.5 问题得到解决。

2015-03-18 15:02:19 2011

原创 VS2010编译通过Soap调用webservice的VC6项目 IXMLDOMNode 不明确的符号的解决办法

VC6 编译没有问题。在VS2010下编译提示:error C2872: “IXMLDOMNode”: 不明确的符号 解决办法如下:将如下代码:#import  using namespace MSXML2; 改成#import   named_guids重新编译就可以了

2015-03-12 09:25:32 2362

原创 如何使用C#创建WebService

打开vs.Net,新建工程Web下面(asp.Net  web服务),默认就可以创建好一个hello world的webservice

2015-03-10 15:07:59 398

转载 vs2010 C++常见问题1:back_inserter

error C2039: “back_inserter”: 不是“std”的成员error C3861: “back_inserter”: 找不到标识符解决方法:#include ﹤iterator﹥相关:http://blog.163.com/yabin99@126/blog/static/134293362201031844410150/http://developer.5

2015-03-09 13:55:18 2288

原创 VC通过Soap调用Webservice编译出现__missing_type__错误解决办法

在VC里面编译遇到了类似__missing_type__的错误,问题纠结了好久。最后经检查msxml4.dll都不是系统预装的,于是从网上下载了两个安装文件msxml4-KB927978-chs.exe安装好以后,按照正常程序来,就可以编译通过了。

2015-03-09 11:13:55 1433

转载 C\C++代码优化的27个建议

1. 记住阿姆达尔定律:funccost是函数func运行时间百分比,funcspeedup是你优化函数的运行的系数。所以,如果你优化了函数TriangleIntersect执行40%的运行时间,使它运行快了近两倍,而你的程序会运行快25%。这意味着不经常使用的代码不需要做较多优化考虑(或者完全不优化)。这里有句俗语:让经常执行的路径运行更加高效,而运行稀少的路径正确运行。

2014-05-26 17:51:07 473

转载 打造自己的wave音频播放器-使用waveOutOpen与waveOutWrite实现

本人应用场景:播放采集设备输出的PCM音频,参考了两种网上实现方法,接口做了些调整,因为播放的音频属性经常需要改变,在播放初始化函数Start传入WAVEFORMATEX参数,这样支持的播放音频种类多,经测试,均能正常播放,使用方法:[html] view plaincopyCViWavePlay* m_pWavPlay;  m_pWavPlay

2014-05-26 14:44:49 8587

转载 Android在子线程中更新Activity中UI的方法

在Android平台下,进行多线程编程时,经常需要在主线程之外的一个单独的线程中进行某些处理,然后更新用户界面显示。但是,在主线线程之外的线程中直接更新页面显示的问题是:系统会报这个异常:ERROR/AndroidRuntime(1222): android.view.ViewRoot$CalledFromWrongThreadException: Only the original

2014-05-04 14:15:33 1789

转载 使用AudioTrack进行音频播放

前一段时间一直在研究Android上面的媒体播放器MediaPlayer,不巧的是发现MediaPlayer的不同版本对于网络上的mp3流支持不是很好,于是就下载了网上的Java开源mp3解码播放源码,然后包装了一下之后发现不知道如何在Android系统上进行播放解码出来的音频数据,因此在网上找了大量的相关资料后,发现在Android系统中有一个AudioTrack类,该类可是实现将音频数据输出到

2014-04-25 14:51:45 707

转载 Android直接播放麦克风采集到的声音

这是一个直接播放麦克风采集到的声音线程类:[java] view plaincopyprint?  class RecordThread extends Thread{      static final int frequency = 44100;      static final int channelConfiguration

2014-04-25 14:41:19 2988 2

转载 给Win32 GUI程序增加控制台窗口的方法

在Win32的GUI程序中,没有控制台窗口,我们输出调试信息时有些不方便,以往我的做法是使用MessageBox弹出对话框、OutputDebugString向VS的调试窗口输出信息等,但总感觉不如控制台输出几句printf有效率。经过尝试发现GUI程序照样能够拥有(且仅能够拥有一个)控制台窗口,具体做法如下:#include 在程序初始化时,加入以下代码:FILE* fp

2014-03-06 16:38:43 1128

转载 VC获取屏幕分辨率及大小相关

vc得到屏幕的当前分辨率方法:1.Windows API调用int width = GetSystemMetrics ( SM_CXSCREEN ); int height= GetSystemMetrics ( SM_CYSCREEN ); 如果想动态自适应分辨率的变化,处理WM_DISPLAYCHANGE消息. 2.获得分辨率BOOL EnumDisplaySettin

2014-02-08 09:06:38 803

转载 c/c++ 多态的概念

预备知识:c++赋值兼容原则:    一个公有派生类的对象在使用上可以被当做基类的对象,反之则禁止。    派生类的对象可以被赋值给基类对象。    派生类的对象可以初始化基类的引用(指针也一样)  多态的概念:  1:先期联编:能够在编译时就能够确定哪个重载的成员函数被调用的情况  2:后期联编(多态性):系统在运行时,能够根据其参数类型确定调用哪个重载的成员

2013-11-19 17:11:46 973

转载 VC下双屏显示的实现

主机上另外再连接一个监视器,这样主机就可以检测到两个显示器,设置显示器属性,将屏幕扩展到第二屏(采用扩展模式)。在VC编程时,可以检测到第二屏的信息(甚至多屏),比如屏的个数,各个屏的分辨率,各个屏的句柄,获得了这些信息后,就可以在第二屏上操作了,比如 画图之类。       在编程中要用到相关的结构体和函数,这些都已经包装好,在multimom.h头文件中,该头文件VC自带有。在要用的的地方

2013-11-12 11:17:39 1185

转载 各种指针的定义

各种指针的定义:点击打开链接 http://www.cnblogs.com/masterhxd/archive/2011/09/12.html  转载1,一个整形数:  int a;2,一个指向整形数的指针: int *a;3,一个指向指针的指针,它指向的指针指向一个整形数:  int **a;4,一个有10个整形数的数组: int a[10];5,一个有10个指针的数组,

2013-10-30 14:09:57 419

转载 listctrl显示缩略图,点击某一项后图标消失的处理方法

listctrl可以用来加载缩略图,但是我在使用vs2008时碰到一个问题,加载缩略图后,点击某一项的缩略图,缩略图会消失。一直很苦恼,不知道是什么原因。后来从网上看到一篇文章,才解决这个问题。    之所以出现这个问题,很有可能是与imagelist有关。    出现问题前,我的代码是这样写的。    CImageList imagelist;    imagel

2013-07-31 15:59:12 760

转载 error PRJ0003 : 生成“cmd.exe”时出错 解决方法

VS 下 error PRJ0003 : 生成“cmd.exe”时出错   解决方法 一直被一个问题所困扰,那就是即使是用向导生成的工程,什么代码也不写,直接编译运行就报错:“error PRJ0003 : 生成 cmd.exe 时出错” 。具体如下:1>------ 已启动生成: 项目: Project1, 配置: Debug Win32 ------1>正在链接

2013-07-19 17:31:54 626

原创 C++ 调用Boost 使用正则表达式实例

#include #include #include  #include "boost/regex.hpp"using namespace std; using namespace boost;void main(){regex reg("\\d{3}([a-zA-Z]+).(\\d{2}|N/A)\\s\\1");string corr

2013-06-22 11:18:14 863

原创 Visual Studio 2008 搭建boost开发环境

boost的介绍以及重要性就不累赘了,直接进入正题。1、编译安装boost,本文以boost_1_47_0文件夹在D盘为例。2、启动Visual Studio 2008,点击“工具”->“选项”,展开“项目和解决方案”,选择“VC++目录”:      3、选择“显示以下内容的目录(s):”的“包含文件”,然后添加“D:\boost_1_47_0”目录。

2013-06-22 11:14:53 622

转载 c++变量在内存中的存储区域

01 #include 0203 #include 04 using namespace std;05 int a = 0; // Initialization Area of Overall06 char *p1; // Not Initialization Area of Overall0708 void main()09 {10 int b; // sta

2013-06-21 14:17:57 562

转载 STL中list的使用

STL中的list就是一双向链表,可高效地进行插入删除元素。现总结一下它的操作。 文中所用到两个list对象c1,c2分别有元素c1(10,20,30) c2(40,50,60)。还有一个list::iterator citer用来指向c1或c2元素。 list对象的声明构造(): A. listc0;                 //空链表 B. listc1(3);

2013-06-19 17:58:19 511

原创 qsort使用实例

// Test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include using namespace std;int fcmp(const void* elem1,const void* elem2){const int* i1 = (const int*)elem1;con

2013-06-09 15:40:06 592

原创 设计一个简单的空间配置器, JJ::allocator

// Test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include #include #include #include using namespace std;namespace JJ{template inline T* _allocate(p

2013-06-09 15:23:30 626

原创 linux安装 emacs

ubuntu的话,直接sudo apt-get install emacs就可以,redhat,CentOs要这样,sudo yum install emacs

2013-03-07 16:17:54 646

转载 哈哈 强大的CButtonST

这里给大家介绍强大的按钮类CButtonST,可以使您的程序锦上添花。CButtonST类主要包括BtnST.h、BtnST.cpp、BCMenu.h和BCMenu.cpp四个文件。先将上述4个文件复制到自己的工程,然后在VC++开发环境中打开该工程,选择【Project\Add to Project\Files…】,会弹出向工程插入文件的对话框,然后在工程所在目录选择上述4个文件,点击【OK

2013-01-30 09:04:55 565

转载 【FTP】批处理实现用FTP服务器上的文件更新本机文件 .

由于批处理很难判断ftp下载何时能够完成,建议分成两个bat来做: 先运行download.bat [c-sharp] view plaincopyprint?@echo off  rem 指定FTP用户名  set ftpUser=USERNAME  rem 指定FTP密码  set ftpPass=PASSWORD  rem 指定FTP服务器地址

2013-01-16 14:22:32 519

转载 【网络应用】批处理获取本机的公网IP地址 .

【方案一】BAT + VBS [c-sharp] view plaincopyprint?@echo off  set "URL=http://www.ip138.com/ip2city.asp"  >%temp%/download.vbs echo Set objDOM = WScript.GetObject(WScript.Arguments(0))  >>

2013-01-16 14:19:45 2179

转载 [C++基础]001_C++异常处理初级出门+中级进阶

转自博客园:http://www.cnblogs.com/alephsoul-alephsoul/archive/2012/11/30/2796905.html 概述   今天听了项目组里的C++高手讲C++的异常,受益匪浅。果然,与高手一起才能学习到更多的东西。下面我就把这位高手介绍的C++异常处理分享给园子里的博友们。什么是异常呢?   在编程语言里,按照出现错误的时机来区

2012-12-04 10:36:14 421

转载 MFC发送消息设置组合框CComboBox控件的高度

MFC进行界面编程时,组合框CComboBox控件在可视化设计组件的时候是无法进行高度编辑的,但是我们在实际的项目中经常需要定制组合框CComboBox的高度以得到良好的用户体验。本文介绍通过发送CB_SETITEMHEIGHT消息给控件的方法实现改变CComboBox控件的高度。该消息定义为        CB_SETITEMHEIGHT          wParam

2012-11-20 17:16:20 2310

转载 vs2010下编译安装boost

到http://www.boost.org/上下载最新的boost库;下面以boost_1_48_0为例下载完成后,解压到默认文件夹boost_1_48_0;从vs2010的命令行入口到...\boost_1_48_0\tools\build\v2\engine下,执行build.bat,完成后会在boost_1_48_0\tools\build\v2\engine\bin.ntx86下面生成bj

2012-10-26 09:10:22 968

转载 GB2312编码表

学编程的肯定都知道ASCII码表,用一个字节的后7位(首位为0,剩下的7位来编码)来表示西文字符和控制符.然而中文汉字数量众多,用一个字节显然是编码不了的,于是中国人发明了GB2312国标码,用两个字节来编码汉字。今天在网上发现了一篇关于GB2312的编码表的博客,感觉很有用,拿过来与大家分享一下。说明:1、这个表用4位16进制数(用4位二进制位来表示一个16进制数)来

2012-10-17 18:02:36 15565

转载 Ubuntu 常用软件安装 .

Ubuntu 常用软件安装分类: Linux 2012-09-20 11:12 9430人阅读 评论(16)收藏 举报1) chromium-browsersudo apt-get install chromium-browser2) google-chromea)  sudo vi  /etc/apt/sources.list.d/goog

2012-09-26 08:44:38 515

转载 BOOST 线程完全攻略 - 基础篇

BOOST 线程完全攻略 - 基础篇目录(?)[+]创建线程互斥体条件变量 线程局部存储仅运行一次的例程Boost线程库的未来参考资料:     C++多线程开发是一个复杂的事情,mfc下提供了CWinThread类,和AfxBeginThread等等函数,但是在使用中会遇到很多麻烦事情,例如线程之间参数传递的问题,我们一般都是把参数new一个结构体,传递给

2012-09-19 11:34:40 559

MySQL技术内幕(第4版)--详细书签版

MySQL技术内幕(第4版) 基本信息 原书名: MySQL (4th Edition) 原出版社: Addison-Wesley Professional 作者: (美)Paul DuBois 译者: 杨晓云 王建桥 杨涛 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115255952 上架时间:2011-7-6 出版日期:2011 年7月 开本:16开 页码:886 版次:4-1 主编推荐 通过阅读由杜波依斯编著的《MySQL技术内幕(第4版)》,可以高效地掌握MySQL的使用方法,从而高效地完成自己的工作。你将会学到怎样把信息资料录入数据库,怎样构造出查询语句以迅速获得有关问题的答案。 即使不是程序员,也可以学习和使用SQL。本书内容的重点之一就是介绍SQL的工作原理。但熟悉SQL的语法并不代表你掌握了SQL的使用技巧,所以本书的另一个重点就是介绍MySQL的独特功能及其用法。 内容简介 《MySQL技术内幕(第4版)》介绍了MySQL的基础知识及其有别于其他数据库系统的独特功能,包括SQL的工作原理和MySQL API的相关知识;讲述了如何将MySQL与Perl或PHP等语言结合起来,为数据库查询结果生成动态Web页面,如何编写MySQL数据访问程序;详细讨论了数据库管理和维护、数据目录的组织和内容、访问控制、安全连接等。附录还提供了软件的安装信息,罗列了MySQL数据类型、函数、变量、语法、程序、API等重要细节。 《MySQL技术内幕(第4版)》是一部全面的MySQL指南,对数据库系统感兴趣的读者都能从中获益。 作者简介 Paul DuBois Sun 公司MySQL文档团队的技术作者、开源社区和MySQL社区活跃的技术专家,同时也是一名数据库管理员。他曾参与过MySQL在线文档的编写工作。除本书外,他还著有MySQL and Perl for the Web、MySQL Cookbook、Using csh and tcsh以及Software Portability with imake等书。 目录 封面 -24 封底 -23 扉页 -22 版权 -21 版权声明 -20 前言 -18 致谢 -8 目录 -6 第一部分 MySQL基础知识 1 第1章 MySQL和SQL 入门 2 1.1 MySQL的用途 2 1.2 示例数据库 4 1.2.1 “美国历史研究会”场景 5 1.2.2 考试记分项目 7 1.2.3 关于示例数据库的说明 7 1.3 数据库基本术语 7 1.3.1 数据库的组织结构 8 1.3.2 数据库查询语言 10 1.3.3 MySQL的体系结构 10 1.4 MySQL 11 1.4.1 如何获得示例数据库 12 1.4.2 最低配置要求 12 1.4.3 如何建立和断开与服务器的连接 13 1.4.4 执行SQL语句 15 1.4.5 创建数据库 17 1.4.6 创建数据表 18 1.4.7 如何添加新的数据行 33 1.4.8 将sampdb数据库重设为原来的状态 36 1.4.9 检索信息 37 1.4.10 如何删除或更新现有的数据行 64 1.5 与客户程序MySQL交互的技巧 66 1.5.1 简化连接过程 67 1.5.2 减少输入查询命令时的打字动作 69 1.6 后面各章的学习计划 72 第2章 使用SQL管理数据 73 2.1 MySQL服务器的SQL模式 73 2.2 MySQL标识符语法和命名规则 74 2.3 SQL语句中的字母大小写问题  77 2.4 字符集支持 78 2.4.1 字符集的设定 79 2.4.2 确定可供选用的字符集和当前设置 80 2.4.3  Unicode支持 81 2.5  数据库的选定、创建、删除和变更 82 2.5.1 数据库的选定 82 2.5.2 数据库的创建 82 2.5.3 数据库的删除 83 2.5.4 数据库的变更 83 2.6 数据表的创建、删除、索引和变更 84 2.6.1 存储引擎的特征 84 2.6.2 创建数据表 90 2.6.3 删除数据表 101 2.6.4 为数据表编制索引 101 2.6.5 改变数据表的结构 106 2.7 获取数据库的元数据 108 2.7.1 用SHOW语句获取元数据 109 2.7.2 从INFORMATION_SCHEMA数据库获取元数据 110 2.7.3 从命令行获取元数据 112 2.8 利用联结操作对多个数据表进行检索 113 2.8.1 内联结 114 2.8.2 避免歧义:如何在联结操作中给出数据列的名字 116 2.8.3 左联结和右联结(外联结) 116 2.9 用子查询进行多数据表检索 120 2.9.1 子查询与关系比较操作符 121 2.9.2 IN和NOT IN子查询 122 2.9.3 ALL、ANY和SOME子查询 123 2.9.4 EXISTS和NOT EXISTS子查询 124 2.9.5 与主查询相关的子查询 124 2.9.6 FROM子句中的子查询 124 2.9.7 把子查询改写为联结查询 125 2.10 用UNION语句进行多数据表检索 126 2.11 使用视图 129 2.12 涉及多个数据表的删除和更新操作 133 2.13 事务处理 134 2.13.1 利用事务来保证语句的安全执行 135 2.13.2 使用事务保存点 139 2.13.3 事务的隔离性 139 2.13.4 事务问题的非事务解决方案 140 2.14 外键和引用完整性 143 2.14.1 外键的创建和使用 144 2.14.2 如果不能使用外键该怎么办 149 2.15 使用FULLTEXT索引 150 2.15.1 全文搜索:自然语言模式 151 2.15.2 全文搜索:布尔模式 153 2.15.3 全文搜索:查询扩展模式 154 2.15.4 配置全文搜索引擎 155 第3章 数据类型 156 3.1 数据值的类别 157 3.1.1 数值 157 3.1.2 字符串值 158 3.1.3 日期/时间值 166 3.1.4 坐标值 166 3.1.5 布尔值 166 3.1.6 空值NULL 166 3.2 MySQL的数据类型 166 3.2.1 数据类型概述 167 3.2.2 数据表中的特殊列类型 168 3.2.3 指定列默认值 169 3.2.4 数值数据类型 170 3.2.5 字符串数据类型 176 3.2.6 日期/时间数据类型 189 3.2.7 空间数据类型 196 3.3 MySQL如何处理非法数据值 197 3.4 序列 199 3.4.1 通用AUTO_INCREMENT属性 199 3.4.2 与特定存储引擎有关的AUTO_INCREMENT属性 201 3.4.3 使用AUTO_INCREMENT数据列时的要点 203 3.4.4 使用AUTO_INCREMENT机制时的注意事项 204 3.4.5 如何在不使用AUTO_INCREMENT的情况下生成序列编号 205 3.5 表达式求值和类型转换 207 3.5.1 表达式的编写 207 3.5.2 类型转换 213 3.6 数据类型的选用 220 3.6.1 数据列将容纳什么样的数据 222 3.6.2 数据是否都在某个特定的区间内 224 3.6.3 与挑选数据类型有关的问题是相互影响的 225 第4章 存储程序 227 4.1 复合语句和语句分隔符 228 4.2 存储函数和存储过程 229 4.2.1 存储函数和存储过程的权限 231 4.2.2 存储过程的参数类型 232 4.3 触发器 233 4.4 事件 234 4.5 存储程序和视图的安全性 236 第5章 查询优化 237 5.1 使用索引 237 5.1.1 索引的优点 238 5.1.2 索引的缺点 240 5.1.3 挑选索引 241 5.2 MySQL的查询优化程序 243 5.2.1 查询优化器的工作原理 244 5.2.2 用EXPLAIN 语句检查优化器操作 247 5.3 为提高查询效率而挑选数据类型 252 5.4 有效加载数据 255 5.5 调度和锁定问题 258 5.5.1 改变语句的执行优先级 259 5.5.2 使用延迟插入 259 5.5.3 使用并发插入 260 5.5.4 锁定级别与并发性 260 5.6 系统管理员所完成的优化 261 5.6.1 使用MyISAM键缓存 263 5.6.2 使用查询缓存 264 5.6.3 硬件优化 265 第二部 分 MySQL的编程接口 267 第6章 MySQL程序设计 268 6.1 为什么要自己编写MySQL程序 268 6.2 MySQL应用程序可用的API 271 6.2.1 C API 272 6.2.2 Perl DBI API 272 6.2.3 PHP API 274 6.3 如何挑选API 275 6.3.1 执行环境 275 6.3.2 性能 276 6.3.3 开发时间 278 6.3.4 可移植性 280 第7章 用C语言编写MySQL程序 281 7.1 编译和链接客户程序 282 7.2 连接到服务器 284 7.3 出错消息和命令行选项的处理 287 7.3.1 出错检查 287 7.3.2 实时获取连接参数 290 7.3.3 给MySQL客户程序增加选项处理功能 301 7.4 处理SQL语句 305 7.4.1 处理修改数据行的语句 306 7.4.2 处理有结果集的语句 307 7.4.3 一个通用的语句处理程序 310 7.4.4 另一种语句处理方案 311 7.4.5 mysql_store_result()与mysql_use_result()函数的对比 312 7.4.6 使用结果集元数据 314 7.4.7 对特殊字符和二进制数据进行编码 319 7.5 交互式语句执行程序 322 7.6 怎样编写具备SSL支持的客户程序 323 7.7 嵌入式服务器库的使用 327 7.7.1 编写内建了服务器的应用程序 328 7.7.2 生成应用程序可执行二进制文件 330 7.8 一次执行多条语句 331 7.9 使用服务器端预处理语句 333 第8章 使用Perl DBI编写MySQL程序 343 8.1 Perl脚本的特点 343 8.2 Perl DBI概述 344 8.2.1 DBI数据类型 344 8.2.2 一个简单的DBI脚本 345 8.2.3 出错处理 349 8.2.4 处理修改数据行的语句 352 8.2.5 处理返回结果集的语句 353 8.2.6 在语句字符串引用特殊字符 361 8.2.7 占位符与预处理语句 363 8.2.8 把查询结果绑定到脚本变量 365 8.2.9 设定连接参数 366 8.2.10 调试 369 8.2.11 使用结果集的元数据 372 8.2.12 实现事务处理 376 8.3 DBI脚本实战 377 8.3.1 生成美国历史研究会会员名录 377 8.3.2 发出会费催交通知 382 8.3.3 会员记录项的编辑修改 387 8.3.4 寻找志趣相同的会员 392 8.3.5 把会员名录放到网上 393 8.4 用DBI开发Web应用 396 8.4.1 配置Apache服务器使用CGI脚本 397 8.4.2 CGI.pm模块简介 398 8.4.3 从Web脚本连接MySQL服务器 404 8.4.4 一个基于Web的数据库浏览器 406 8.4.5 考试记分项目:考试分数浏览器 410 8.4.6 美国历史研究会:寻找志趣相同的会员 413 第9章 用PHP编写MySQL程序 418 9.1 PHP概述 419 9.1.1 一个简单的PHP脚本 421 9.1.2 利用PHP库文件实现代码封装 424 9.1.3 简单的数据检索页面 428 9.1.4 处理语句结果 431 9.1.5 测试查询结果里的NULL值 434 9.1.6 使用预处理语句 434 9.1.7 利用占位符来处理带引号的数据值 435 9.1.8 出错处理 437 9.2 PHP脚本实战 438 9.2.1 考试分数的在线录入 438 9.2.2 创建一个交互式在线测验 449 9.2.3 美国历史研究会:会员个人资料的在线修改 454 第三部分 MySQL的系统管理 461 第10章 MySQL系统管理简介 462 10.1 MySQL组件 462 10.2 常规管理 463 10.3 访问控制与安全性 464 10.4 数据库的维护、备份和复制 464 第11章 MySQL的数据目录 466 11.1 数据目录的位置 466 11.2 数据目录的层次结构 468 11.2.1 MySQL服务器如何提供对数据的访问 468 11.2.2 MySQL数据库在文件系统里是如何表示的 469 11.2.3 数据表在文件系统里的表示方式 470 11.2.4 视图和触发器在文件系统里的表示方式 471 11.2.5 SQL语句与数据表文件操作的对应关系 472 11.2.6 操作系统对数据库对象的命名规则有何影响 472 11.2.7 影响数据表最大长度的因素 474 11.2.8 数据目录的结构对系统性能的影响 475 11.2.9 MySQL状态文件和日志文件 477 11.3 重新安置数据目录的内容 479 11.3.1 重新安置工作的具体方法 479 11.3.2 重新安置注意事项 480 11.3.3 评估重新安置的效果 480 11.3.4 重新安置整个数据目录 481 11.3.5 重新安置各个数据库 481 11.3.6 重新安置各个数据表 482 11.3.7 重新安置InnoDB共享表空间 482 11.3.8 重新安置状态文件和日志文件 482 第12章 MySQL数据库系统的日常管理 484 12.1 安装MySQL软件后的初始安防设置 484 12.1.1 为初始MySQL账户设置口令 485 12.1.2 为第二个服务器设置口令 489 12.2 安排MySQL服务器的启动和关停 489 12.2.1 在Unix上运行MySQL服务器 489 12.2.2 在Windows上运行MySQL服务器 493 12.2.3 指定服务器启动选项 495 12.2.4 关闭服务器 497 12.2.5 当你未能连接至服务器时重新获得服务器的控制 497 12.3 对MySQL服务器的连接监听情况进行控制 499 12.4 管理MySQL用户账户 500 12.4.1 高级MySQL账户管理操作 501 12.4.2 对账户授权 503 12.4.3 查看账户的权限 510 12.4.4 撤销权限和删除用户 510 12.4.5 改变口令或重新设置丢失的口令 511 12.5 维护日志文件 512 12.5.1 出错日志 514 12.5.2 常规查询日志 515 12.5.3 慢查询日志 515 12.5.4 二进制日志和二进制日志索引文件 516 12.5.5 中继日志和中继日志索引文件 517 12.5.6 日志数据表的使用 518 12.5.7 日志管理 519 12.6 调整MySQL服务器 524 12.6.1 查看和设置系统变量的值 525 12.6.2 通用型系统变量 528 12.6.3 查看状态变量的值 530 12.7 存储引擎的配置 531 12.7.1 为MySQL服务器挑选存储引擎 531 12.7.2 配置MyISAM存储引擎 533 12.7.3 配置InnoDB存储引擎 536 12.7.4 配置Falcon存储引擎 541 12.8 启用或者禁用LOAD DATA语句的LOCAL能力 541 12.9 国际化和本地化问题 542 12.9.1 设置MySQL服务器的地理时区 542 12.9.2 选择用来显示出错信息的语言 544 12.9.3 配置MySQL服务器的字符集支持 544 12.10 运行多个服务器 545 12.10.1 运行多个服务器的问题 545 12.10.2 配置和编译不同的服务器 547 12.10.3 指定启动选项的决策 548 12.10.4 用于服务器管理的mysqld_multi 549 12.10.5 在Windows系统上运行多个MySQL服务器 550 12.11 升 级MySQL 553 第13章 访问控件和安全 555 13.1 内部安全性:防止未经授权的文件系统访问 555 13.1.1 如何偷取数据 556 13.1.2 保护你的MySQL安装 557 13.2 外部安全性:防止未经授权的网络访问 562 13.2.1 MySQL权限表的结构和内容 562 13.2.2 服务器如何控制客户访问 568 13.2.3 一个关于权限的难题 572 13.2.4 应该回避的权限数据表风险 575 13.3 加密连接的建立 577 第14章 MySQL数据库的维护、备份和复制 582 14.1 数据库预防性维护工作的基本原则 582 14.2  在MySQL服务器运行时维护数据库 583 14.2.1 以只读方式或读/写方式锁定一个或多个数据表 584 14.2.2 以只读方式锁定所有的数据库 586 14.3 预防性维护 587 14.3.1 充分利用MySQL服务器的自动恢复能力 587 14.3.2 定期进行预防性维护 588 14.4 制作数据库备份 589 14.4.1 用mysqldump程序制作文本备份 590 14.4.2 制作二进制数据库备份 593 14.4.3 备份InnoDB或Faclcon数据表 595 14.5 把数据库复制到另一个服务器 596 14.5.1 使用一个备份文件来复制数据库 596 14.5.2 把数据库从一个服务器复制到另一个 597 14.6 数据表的检查和修复 598 14.6.1 用服务器检查和修复数据表 599 14.6.2 用mysqlcheck程序检查和修复数据表 599 14.6.3 用myisamchk程序检查和修复数据表 600 14.7 使用备份进行数据恢复  603 14.7.1 恢复整个数据库 603 14.7.2 恢复数据表 604 14.7.3 重新执行二进制日志文件里的语句 605 14.7.4 InnoDB存储引擎的自动恢复功能 606 14.8 设置复制服务器 607 14.8.1 复制机制的工作原理 607 14.8.2 建立主从复制关系 609 14.8.3 二进制日志的格式 611 14.8.4 使用复制机制制作备份 612 第四部分 附录 613 附录A 获得并安装有关软件 614 附录B 数据类型指南 630 附录C 操作符与函数用法指南 643 附录D 系统变量、状态变量和用户变量使用指南 705 附录E SQL语法指南 746 附录F MySQL程序指南 823 附录G API指南 887 附录H Perl DBI API指南 930 附录I PHP API指南 953 前言 无论是在商业、科研和教育等方面的传统性应用项目里,还是作为因特网搜索引擎的后端支持,RDBMS(Relational Database Management System,关系数据库管理系统)在许多场合都是一种极其重要的工具。良好的数据库系统对于管理和访问信息资源来说至关重要,但很多企事业单位都没有足够的财力建立起自己的数据库系统。从历史上看,数据库系统一直是价格昂贵的产品,无论是软件本身还是后续的技术支持,供货商从来都是漫天要价。此外,为了获得令人满意的性能表现,数据库引擎往往对计算机硬件要求很高,而这又将使数据库系统的运营成本大大增加。 计算机硬件和软件在最近几年里的发展已经使这种情况得到了改善。小型桌面系统和服务器的价格越来越低,性能越来越高,而为它们编写高性能操作系统正成为一种潮流。这些操作系统有的可以从因特网免费获得,有的可以通过价格低廉的CD获得。它们包括BSD Unix操作系统的几种变体(如FreeBSD、NetBSD、OpenBSD等)以及各种各样的Linux发行版本(如Fedora、Debian、Gentoo、SuSE等)。 免费的操作系统因诸如GNU C编译器gcc之类的免费开发工具的发展而日臻完善。让任何人都能得到想要的软件,这正是开源运动的一部分。开源项目已经为我们提供了很多重要的软件产品,如因特网上使用范围最广的Web服务器Apache,以及广泛应用的通用脚本语言Perl、Python和Ruby,还有非常便于编写动态Web页面的PHP语言等。与此形成鲜明对比的是,如果决定采用某种专有的商业化解决方案,就不得不忍受供货商漫天要价,而且还极有可能根本看不到它的源代码。 开源运动也使免费的数据库软件和数据库系统越来越容易获得。例如MySQL就是一种免费的数据库系统,它是一种客户/服务器模式的关系数据库管理系统,最初起源于欧洲的斯堪的纳维亚半岛。MySQL由以下组件构成:一个SQL服务器、一些用来访问该服务器的客户程序、一套用来对数据库进行管理的软件工具,以及供用户自己编写程序的编程接口。 MySQL起源于Michael Widenius(外号Monty)在1979年为瑞典的TcX公司开发的一套名为UNIREG的数据库工具。到了1994年,TcX公司开始寻求一种能够用来开发Web应用的数据库服务器。TcX公司对几种商业化的服务器进行了测试,对它们在处理TcX公司的大数据表时的速度都不太满意。该公司还测试了mSQL,它缺少某些必要的功能。因此,Monty开始开发一种新的服务器。因为mSQL有一些免费的软件工具,所以新服务器的编程接口被有意设计成与mSQL所使用的编程接口非常相似。采用相似的编程接口将大大减少把那些免费的软件工具移植到MySQL的工作量。 到了1995年,Detron HB公司的David Axmark开始在因特网上推广和发行TcX公司研发的MySQL。David为MySQL编写了许多文档,增加了利用GNU组织的configure工具进行安装配置的功能。适用于Linux和Solaris系统的MySQL 3.11.1的二进制版本于1996年面世。如今,MySQL不仅能够在许多种计算机平台上运行,还同时提供二进制版本和源代码版本。MySQL在开源许可证和商业许可证下的发布、技术支持、监控服务和培训工作以前由MySQL AB公司专门负责。Sun公司在2008年收购了MySQL AB公司,但保持了MySQL的开源特色(Sun公司的许多产品现在都可以在开源许可证下获得和使用)。 早期的MySQL广受欢迎的主要原因是它的速度和简单性,但因为缺少诸如事务处理(transaction)和外键支持(foreign key support)之类的高级功能,所以也有一些批评的声音。MySQL的开发和完善工作从未停止,发展至今,事务处理、外键支持、复制(replication)、子查询、存储过程、视图和触发器等功能都已被添至其中。这些功能让MySQL进入了企业级数据库软件的行列。结果,许多原来只考虑大型数据库系统而对MySQL不屑一顾的用户开始认真评估MySQL了。 MySQL的可移植性非常好,它可以运行在商业化操作系统(如Mac OS X、HP-UX和Windows)以及包括桌面电脑和企业级服务器的硬件平台上。此外,MySQL的运行性能绝不逊色于任何一种数据库系统,即使面对容纳着几十亿条数据记录的大型数据库,它也能游刃有余。在商业领域里,MySQL的地盘一直在扩大,这是因为许多公司的老板发现,与购买商业化许可证和技术支持服务相比,只需花一点零头就可以满足数据库处理需求。 未来我们将可以在功能强大但价格低廉的硬件设备上运行免费的操作系统,将有越来越多的人和商业机构在各种各样的硬件系统上拥有强大的计算能力和其他功能,MySQL则在其中起着重要作用。获得强大计算能力的经济成本的门槛正变得越来越低,大型数据库解决方案对普通用户和企业来说也已经不再是可望不可及的了。在过去,高性能的RDBMS只能出现在广大中小企业的梦想里,可现在,只需付出极低的成本和代价就能享用到这些东西。这一点对个人用户而言就更加突出了。就拿我本人来说吧,我有一台苹果笔记本电脑,在它的Mac OS X操作系统上,我同时使用着MySQL以及Perl、Apache和PHP。这使我能够随时随地工作,而这一解决方案的总成本只是笔记本电脑的价钱而已。 为什么要选用MySQL 如果你正在寻求一种完全免费或者价格比较低廉的数据库管理系统,可以从MySQL、PostgreSQL和SQLite等软件中选择一个。在对MySQL和其他数据库系统进行评估之前,首先要弄清楚什么因素对自己最重要。你需要从运行性能、技术支持、特色功能(例如与SQL的兼容程度和可扩展性等)、许可证条件、购买价格等多方面进行全面的考虑。由此判断,MySQL在以下方面有比较吸引人的优势。 运行速度。MySQL的运行速度相当快,MySQL开发人员相信它是目前最快的数据库系统。你可以在MySQL网站http://www.mysql.com/why-mysql/benchmarks/上的性能比较主页上查到有关数据。 易使用。MySQL是一种简单易用的高性能数据库系统,与其他大型数据库系统相比,MySQL的安装和管理工作要容易得多。 查询语言支持。MySQL支持SQL语言,SQL是各种现代数据库系统的首选查询语言。 功能丰富。MySQL是多线程的,允许多个客户同时与服务器建立连接。每个客户都可以同时打开并使用多个数据库。你可以通过好几种办法(如命令行客户程序、Web浏览器、GUI客户程序等)对MySQL数据库进行交互式访问,在输入查询命令后立刻看到查询结果。此外,MySQL还准备了C、Perl、Java、PHP、Python和Ruby等多种语言的编程接口。你还可以通过支持ODBC(Open Database Connectivity,数据库开放连接,一种由微软公司开发的数据库通信协议)功能和.NET的应用程序来访问MySQL数据库。也就是说,你既可以选用现成的客户程序来访问MySQL数据库,也可以根据具体的应用来编写相关软件。 优异的联网和安防性能。MySQL是完全网络化的数据库系统,用户可以从因特网上的任意地点去访问它,因此你完全可以把你的数据拿出来与任何地方的任何人共享。同时,MySQL还具备完善的访问控制机制,这就将那些不应该看到你数据的人拒之门外。此外,为了提供更进一步的安防措施,MySQL还支持使用SSL(Secure Socket Layer,安全套接字层)协议的加密连接。 可移植性。MySQL既能够运行在多种版本的Unix和Linux操作系统上,也能够运行在Windows和NetWare系统上。MySQL可以运行在各种硬件设备上,包括高端服务器。 短小精悍。与某些数据库系统巨大的硬盘空间消耗量相比,MySQL发行版本的硬盘占用量相对要小得多。 成本低廉。MySQL是一个开源项目,只要遵守GNU组织的GPL(General Public License)许可证条款,就可以任意使用。这意味着MySQL在大多数情况下都是免费的。其次,如果是喜欢或需要正规安排或是不想接受GPL许可证约束的组织,还有商业许可证可供选择。 来源广泛。MySQL很容易获得,只要你有Web浏览器,就能从许多地方下载它。如果你想知道某个组件的工作原理,对它的某个算法感到好奇,或者想进行安全检查,你完全可以通过源代码来钻研它。如果你不喜欢它的某个组件,也完全可以自行加以修改。如果你自认为发现了一个bug,可以报告给相关开发人员。 MySQL的技术支持怎么样?这个问题问得好,不能提供支持的数据库系统没什么用。本书就是一种支持,希望它可以满足你在数据库方面的需要(本书既然是第4版了,就表明它能做到这一点)。你还可以利用其他一些MySQL的相关资源。 MySQL的发行版本都带有《MySQL参考手册》(MySQL Reference Manual),有在线版和印刷版。MySQL用户对这本手册都给予了很高的评价。这一点非常重要,因为如果没有人知道如何使用,再好的软件产品也会贬值。 如果你想得到正规的培训或者专业的技术支持,可以报名参加Sun公司开设的培训课程,或者与该公司签订技术支持和跟踪服务合同。 MySQL社区有一些非常活跃的邮件列表,任何人都能订阅。这些邮件列表有很多专家级的参与者,许多MySQL开发人员都是它的常客。作为提供技术支持的电子资源,它们被很多订阅者认为是物有所值。 MySQL大家庭(包括开发人员和普通用户在内)是一个团结互助的群体。贴在邮件列表上的求助帖子通常在几分钟内就会得到回复。如果有人报告说发现了一个bug并得到确认,开发人员就会马上发布一个修补方案并经由因特网迅速传遍整个社区。与此形成鲜明对照的是,某些大厂商提供的技术支持服务令人困惑,那种不得其门而入的感觉实在让人着急上火。你遇到过这样的情况吗?我遇到过。 如果你正打算挑选一种数据库产品,那么MySQL绝对是理想的候选。使用MySQL既无风险,也不需要花费金钱。如果你遇到了问题,还可以通过邮件列表寻求帮助。当然了,做这样的评估必定会花费一些时间,但无论你原来计划使用哪种数据库产品,反正都要花时间评估。与很多其他的数据库产品相比,安装和测试MySQL的时间肯定少得多。 如果已经在运行其他RDBMS,该怎么办 如果你已经在使用某种数据库系统,但又颇受限制,那就绝对应该给MySQL一个机会。也许你觉得自己现有系统的性能不太好,也许它是一个专有产品而你又不想吊死在一棵树上,也许你想更换现有的硬件设备而现有的软件系统却不支持,也许你现有的软件都是二进制代码而你更希望得到一种能够提供源代码的系统,也许你只是嫌它花钱太多……这一切都是你应该给MySQL一个机会的理由。你可以先通过本书熟悉一下MySQL的功能,再到MySQL邮件列表上提几个问题,然后再根据具体情况慎重抉择。 要明确的是,尽管所有主要的数据库引擎都支持SQL语言,但每种引擎支持不同的“方言”。请查阅本书关于MySQL所支持的SQL“方言”以及相关数据类型的章节。你也许会发现它们与你目前使用的RDBMS所支持的SQL版本区别太大,因而需要付出巨大的努力才能把你的应用程序迁移到MySQL系统上来。 当然,作为评估工作的一部分,应该先通过几个例子看看效果。这会让你在评估时获得宝贵的实际体验。MySQL的研发人员一直在努力让MySQL符合SQL语言标准,其效果之一就是让数据库应用程序迁移道路上的障碍随着时间的推移而不断减少,所以你的迁移工作很可能会比预期的容易许多。 MySQL提供的软件工具 MySQL的发行版本都附带以下几种工具程序。 一个SQL服务器。运转整个MySQL的引擎,对MySQL数据库的访问和操作都要通过它才能实现。 客户程序和工具程序。其中包括一个供你直接提交查询并查看其结果的交互式客户程序以及几个用来对数据库站点进行管理和维护的工具程序。有一个工具程序用来监控MySQL服务器,另外几个工具程序则负责数据的导入、备份、数据表问题检查等。 一个供你自行开发应用程序的客户端库。这个函数库是用C语言写的,所以你可以用C语言来编写客户程序。此外,这个函数库还提供了一些供其他语言(如Perl、PHP和Ruby)使用的第三方接口。 除MySQL本身提供的软件外,有很多聪明人也使用MySQL编写一些小程序来提高工作效率,并把自己的成果拿出来与大家分享。在这些第三方工具软件里,有些能帮助你更加得心应手地使用MySQL,还有一些把MySQL的功能进一步扩展到Web站点建设等方面中。 本书能让你学到哪些东西 通过阅读本书,可以高效地掌握MySQL的使用方法,从而高效地完成自己的工作。你将会学到怎样把信息资料录入数据库,怎样构造出查询语句以迅速获得有关问题的答案。 即使不是程序员,也可以学习和使用SQL。本书内容的重点之一就是介绍SQL的工作原理。但熟悉SQL的语法并不代表你掌握了SQL的使用技巧,所以本书的另一个重点就是介绍MySQL的独特功能及其用法。 你将学习如何把MySQL与其他软件工具结合起来。本书还将介绍如何通过MySQL与Perl或PHP语言来为数据库的查询结果生成动态Web页面,以及如何自行编写MySQL数据库访问程序。自行编写的程序会大大拓展MySQL的功能,满足应用项目的具体要求。 对于那些负责MySQL安装的人员,本书将为他们介绍有关职责及具体工作流程。你将学会如何建立用户账户,如何备份数据库,以及如何保证数据库的安全。 本书各章内容 本书内容分四部分。第一部分集中讨论数据库应用方面的概念。第二部分的重点是如何使用MySQL编写你们自己的程序。第三部分的目标读者是数据库管理员。第四部分是几个参考附录。 第一部分:MySQL基础知识 第1章主要包括MySQL的用途与用法、交互式MySQL客户程序的使用方法、SQL基础知识和MySQL的常用功能。 如今,各种主流的RDBMS都能识别和理解SQL语言,但各种数据库引擎所使用的SQL语言彼此有着细微的差异。第2章重点介绍使MySQL有别于其他数据库系统的特色功能。 第3章主要包括MySQL为存储信息而提供的数据类型、各种类型的特点和局限性、它们的使用时机和使用方法,以及如何在相似的数据类型中作出选择,还有表达式的求值办法和各类型之间的转换机制等。 第4章讨论如何编写和使用存储在服务器端的SQL程序,包括各种存储函数、存储过程、触发器和事件。 第5章讨论如何使查询有效地运行。 第二部分:MySQL的编程接口 第6章介绍MySQL提供的几种API(Application Programming Interface,应用程序编程接口)以及本书所涉及的几种API之间的详细比较。 第7章讲述如何利用MySQL的C客户端库所提供的API来编写C语言程序。 第8章探讨如何利用DBI模块编写Perl脚本,包括独立的命令行脚本和用于网站的CGI脚本。 第9章介绍如何利用PHP脚本语言和PHP数据对象(PDO)的数据库访问扩展来编写用来访问MySQL数据库的动态Web页面。 第三部分:MySQL的系统管理 第10章介绍数据库管理员的工作职责,以及如何让数据库站点成功运行。 第11章详细介绍MySQL数据子目录(即MySQL用来存放各种数据库文件、日志文件和状态文件的地方)的组织布局和内容。 第12章阐述如何在操作系统开启和关闭时正确完成MySQL服务器的开启和关闭,如何在MySQL系统里建立用户账户,如何维护日志文件,如何配置存储引擎,如何优化数据库服务器,以及如何运行多个服务器,等等。 第13章介绍如何提高MySQL的安防水平以抵御各种入侵和破坏(可能来自数据库服务器主机的其他用户和网络客户端),如何配置你的MySQL服务器以支持SSL上的安全连接。 第14章阐释如何通过预防性措施来降低灾难的发生几率,如何备份数据库,如何在灾难真的发生时(即使采取了预防性措施)尽快恢复系统的运转。 第四部分:附录 附录A介绍如何获得并安装本书所提到的主要工具和示例数据库文件。 附录B详细说明MySQL数据类型。 附录C探讨在SQL语句中用来编写表达式的操作符和函数。 附录D介绍 MySQL服务器维护的各个变量和SQL语句变量的用法。 附录E描述MySQL支持的每个SQL语句。 附录F介绍MySQL发行版本所提供的程序。 说明 附录G、H、I需要上网获取。先访问www.informit.com/title/9780672329388,注册后可获取它们。也可以访问www.kitebird.com/mysql-book来获取它们 。 附录G介绍MySQL C客户端库所提供的数据类型和函数。 附录H讨论Perl DBI模块提供的方法和属性。 附录I介绍PDO扩展为在PHP中支持MySQL而提供的方法。 如何阅读本书 阅读本书的任何地方时,都应该同时尝试示例。这意味着你一定要先在计算机上安装MySQL,再安装示例数据库sampdb的有关文件,本书的许多示例都要用到sampdb数据库。获得和安装有关组件的办法与步骤可以在附录A里查到。 如果你是一位MySQL数据库系统或SQL语言的新手,请从本书的第1章开始学习。第1章介绍了MySQL与SQL的基本概念和使用入门,对加快本书后续章节的学习有很大帮助。然后再前进到第2章、第3章和第4章去学习如何描述和使用你自己的数据。这样,你就能有针对性地探索各种MySQL功能了。 即使你已经具备了一些SQL知识,也应该从第2章和第3章入手。不同的RDBMS系统所实现的SQL功能也不同,你应该首先弄清楚MySQL与你所熟悉的其他RDBMS系统有何区别。 如果你已经有了一些MySQL方面的经验但还需要进一步了解某些特定操作的原理,请把本书当做一本参考大全并根据需要有选择地查阅。你将发现书后的各个附录非常有价值。 如果你想编写能访问MySQL数据库的程序,请从第6章开始去学习有关API的章节。如果你想为自己的数据库开发一些便于使用的基于Web的前端访问程序,或者想为自己的数据库网站开发一些后端程序来增添动态内容,请阅读第8章和第9章。 如果要对MySQL和自己正在使用的RDBMS进行比较评估,本书的几个部分将有所帮助。如果想了解MySQL与你现有的SQL系统有何异同,请阅读本书第一部分中专门讨论数据类型和SQL语法的章节;如果你打算自己开发应用程序,请阅读第二部分中讨论编程的章节;如果你想了解MySQL需要何种级别的数据库管理功能,请阅读第三部分中有关管理的章节。如果你现在还没使用数据库,但正在对MySQL和其他数据库系统进行比较以作出选择,这些内容对你也将有很大的帮助。 书中涉及的软件及其版本 本书的第1版主要围绕MySQL 3.22版展开讨论并简要地介绍MySQL 3.23版。第2版把讨论范围扩大到了MySQL 4.0系列和MySQL 4.1系列的第一个发行版本。第3版讨论MySQL 4.1和MySQL 5.0中最早的几个发行版本。 本书是第4版,讨论的是MySQL 5.0。具体而言,本书将讨论MySQL 5.0和5.1版,以及MySQL 6.0中最早发行的几个版本。本书的大部分内容仍适用于5.0和更早的版本,但我们不会特别指出特定于老版本的地方。 MySQL 5.0系列已经达到了通用阶段(即所谓的GA版),也就是说它已被认为能够稳定地运行在日常生产环境里。因为在MySQL 5.0系列的早期发行版本里有大量的修改,所以建议大家尽量选择最新的版本。在我编写本书的时候,5.0系列的最新版本是5.0.64。MySQL 5.1系列现处于备选版开发(Candidate Development)阶段,应该很快就会达到通用阶段。如果你想试试诸如事件调度器或XML支持之类的功能,你将需要MySQL 5.1。 如果你正在使用的MySQL版本早于5.0,本书讨论的以下几项功能将不可用。 MySQL 5.0中增加的存储函数和过程、视图、触发器、脚本输入处理、真正的VARCHAR类型以及INFORMATION_SCHEMA。 MySQL 5.1增加的事件调度器、分区、日志数据表和XML支持。 如果需要了解老版本,请访问MySQL官方文档网站http://dev.mysql.com/doc/,在那里可以查到每个版本的《参考手册》。 请注意以下几个没在本书里讨论的主题。 一些MySQL Connector组件,用户可通过它们访问Java、ODBC和.NET程序。 NDB存储引擎和MySQL Cluster组件,它们用来提供以内存为介质的存储机制、高可用性和冗余。细节问题请查阅《MySQL参考手册》。 诸如MySQL Administrator和MySQL Query Brower之类的GUI(Graphical User Interface,图形化用户界面)工具。这些工具有助于在窗口环境里使用MySQL。 如果需要下载这些产品或查阅它们的文档,请访问http://www.mysql.com/products/或http://dev.mysql.com/doc/。 至于书中涉及的其他一些主要软件,目前比较常见的版本都应该可以满足书中示例的需要。(请注意:PDO数据库访问扩展必须使用PHP 5或更高版本,而在PHP 4环境下无法工作。)各主要软件的最新版本如下所示: 软件包 版本 Perl DBI模块 1.601 Perl DBD::mysql模块 4.007 PHP 5.2.6 Apache 2.0.63/2.2.8 CGI.pm 3.29 书中提到的所有软件都可以在因特网上找到。附录A介绍如何获得并在自己的系统上安装MySQL、Perl DBI、PHP和PDO、Apache、CGI.pm等软件,如何获得本书通篇使用的sampdb示例数据库(其中包含本书讲述程序设计时会用到的示例程序)。 如果读者使用的是Windows,我将假设你有Windows 2000、XP、2003或Vista之类相对较新的版本。本书里讨论的某些功能,例如命名管道和Windows服务,较早的版本(Windows 95、98或Me)不支持。 排版约定 本书的排版要求如下所示。 文件名和命令等都用Courier字体表示。 命令中需要由读者输入的部分用Courier加粗表示。 命令中需要由读者替换为自己选择的内容的部分用Courier斜体字表示。 在需要进行交互操作的例子里,我将假设你会把命令输入到终端窗口或控制台窗口。为反映出上下文环境,我将通过命令行提示符来表明所运行的命令的执行环境。比如说,对于通过mysql客户程序输入的SQL语句,相应的命令行提示符将是mysql>。对于通过命令解释器输入的命令,提示符将是%,这个提示符表示命令可以在Unix系统或者Windows系统下使用,但你们看到的提示符到底是什么要取决于命令解释器。(对Unix用户而言,命令解释器就是你的登录shell;对Windows用户而言,它是cmd.exe或command.exe程序)。#提示符的意义比较特殊,它表示命令通过su或sudo命令由Unix系统上的root用户执行,而C:\>提示符则表示Windows系统上的专用命令。 下面的例子给出了一条应该从命令解释器输入的命令。%是提示符,不需要输入。为了输入这条命令,需要依次输入粗体字字符并用你自己的用户名替换斜体字: % mysql --user=user-name sampdb 在SQL语句里,SQL关键字和函数名都用大写英文字母,而数据库、数据表、数据列的名称则全部用小写字母。 在语法描述中,方括号[]表示内容可选,可选的内容以垂直线字符|分隔。方括号内的列表是可选的,其具体内容应该是该列表里的某一个数据项。花括号{}内的列表是必不可少的,必须从该列表里选择一个数据项。 其他资源 如果你没能在本书里找到问题的答案,该怎么办呢?以下是一些软件的网站。 软件包 官方Web站点 MySQL http: //dev.mysql.com/doc/ Perl DBI http: //dbi.perl.org/ PHP http: //www.php.net / Apache http: //httpd.apache.org/ CGI.pm http: //search.cpan.org/dist/CGI.pm/ 这些网站提供的信息资源有参考手册、常见问题答疑文档(Frequently Asked-Question,FAQ)和各种邮件列表等。 参考手册。 MySQL发行版本中自带的主要文档。这些文档的格式有很多种,网上还有它们的在线版本和可下载版本。 PHP的使用手册也有好几种格式。 手册页面。DBI模块及其MySQL专用驱动程序DBD::mysql的文档可以从命令行使用perldoc命令查阅。试试perldoc DBI和perldoc DBD::mysql命令。DBI的文档侧重于基本概念,而其MySQL专用驱动程序的文档则侧重于与MySQL有关的各种具体功能。 FAQ文档。DBI、PHP、Apache各有各的FAQ文档。 邮件列表。本书所涉及的一些软件有它们各自的邮件列表。如果你打算使用某个工具软件,那最好订阅一份与之有关的邮件列表。使用邮件列表上的归档文件也是个好主意。如果你不熟悉某个软件工具,你的很多问题就可能是很多前人已经问过(并得到回答)无数次的了;你不必再提出类似的问题,因为它们的答案几乎都能在邮件列表的归档文件中搜索到。 不同的邮件列表有不同的订阅方式,下面这些URL地址可以为你提供相应的帮助。 软件包 邮件列表订阅站点 MySQL http: //lists.mysql.com / Perl DBI http: //dbi.perl.org /support/ PHP http: //www.php.net /mailing-lists.php Apache http: //httpd.apache.org /lists.html 其他网站。 除官方网站外,书中涉及的某些软件工具还另有一些提供其他信息(如示例程序的源代码和热门文章)的网站。这些网站大都可以通过官方网站上的链接找到。

2014-12-03

VC++双屏显示源码

双屏显示源代码,是双屏编程人员必不可少的参考代码,可实现扩展模式、克隆模式。 可以编译通过 不缺文件 可以运行

2013-11-04

SQLServer2000的jdbc驱动(绝对可用)

直接解压得到三个文件,如果你装有tomcat,请复制到你的tomcat目录下的common/lib目录下,再重新启动tomcat即可

2013-07-02

SqlServer2000的JDBC驱动

安装JDBC 执行ms_jdbc_setup.exe可执行文件,一切只需要点击下一步,至到出现finish按钮,完成安装。 注: (1) ms_JDBC_setup默认安装路径为:c:\Program Files\Microsoft SQL Server 2000 Driver for JDBC (2)此版(Version 2.2.0022)本仅支持Microsoft SQL Server 2000 Driver for JDBC (3)安装目录\lib\下的三个jar文件即是我们要的JDBC驱动核心 msbase.jar mssqlserver.jar msutil.jar 注意事项 1. 要保证你的Sql服务是启动状态 2. 在Sql 的管理器中能够使用sa或其它用户正常登录;(有些人在安装sql时用了nt用户管理模式,这里可能会有一定问题) 3. 第一次配置好环境变量最好能重启一下电脑 4. 注意JVM和DataBase的启动顺序:先启动DataBase,再启动JVM机。 注:在停止Web服务器后,再重启动,中间最好能有10秒以上的间隔。 5. 注意操作系统的网络连通性 A.启动了Tcp/IP服务 B.配置了相关IP地址,有些人机器可能用的是自动分配IP或有配置IP时,但网络不通可能也找不到IP 6. 有些机器在调试明最好能将(四)中的连接地址localhost改成数据库服务器的IP,这也是要注意5的原因。

2013-07-02

程序员实用算法 PDF

作者:(美)瑞克斯 / (美)宾斯托克 出版日期:2009-9-1 出版社:机械工业出版社 页数:437 ISBN:9787111272960 文件格式:PDF 简介   本书重点关注的是实用、立即可用的代码,并且广泛讨论了可移植性和特定于实现的细节。本书作者介绍了一些有用但很少被讨论的算法,它们可用于语音查找、日期和时间例程(直到公元1年)、B树和索引文件、数据压缩、任意精度的算术、校验和与数据验证,并且还最全面地介绍了查找例程、排序算法和数据结构。     本书结构清晰,示例丰富,可作为广大程序员的参考用书。 作者简介   Andrew Binstock是《UNIX Review》的主编和《C Gazette》的创刊编辑。他是《HP LaserJet Programming》(Addison-Wesley,1991)的第一作者。 目录 译者序 前言 致谢 第1章 绪论  1.1 评估算法  1.2 修改算法   1.2.1 主要的优化:I/O   1.2.2 主要的优化:函数调用  1.3 资源和参考资料 第2章 基本数据结构  2.1 链表   2.1.1 双向链表   2.1.2 链表的其他特征  2.2 栈和队列   2.2.1 栈的特征   2.2.2 队列的特征 第3章 散列  3.1 散列的概念  3.2 散列函数  3.3 冲突解决方法   3.3.1 线性再散列法   3.3.2 非线性再散列法   3.3.3 外部拉链法  3.4 性能问题  3.5 资源和参考资料 第4章 查找  4.1 查找的特征   4.1.1 准备时间   4.1.2 运行时间     4.1.3 回溯的需要  4.2 蛮力查找  4.3 BoyerMoore查找   4.3.1 启发式方法#1:跳过字符   4.3.2 启发式方法#2:重复模式  4.4 多字符串查找  4.5 用于正则表达式的字符串查找:grep  4.6 近似字符串匹配技术  4.7 语音比较:Soundex算法  4.8 Metaphone:现代的Soundex  4.9 选择技术  4.10 资源和参考资料   4.10.1 通用参考资料   4.10.2 BoyerMoore   4.10.3 多字符串查找   4.10.4 正则表达式查找   4.10.5 近似字符串匹配   4.10.6 Soundex算法和Metaphone算法 第5章 排序  5.1 排序的基本特征   5.1.1 稳定性   5.1.2 对哨兵的需求   5.1.3 对链表进行排序的能力   5.1.4 输入的阶的相关性   5.1.5 对额外存储空间的需求   5.1.6 内部排序技术与外部排序技术  5.2 排序模型   5.2.1 冒泡排序   5.2.2 插入排序   5.2.3 希尔排序   5.2.4 快速排序   5.2.5 堆排序  5.3 对链表进行插入排序  5.4 对链表进行快速排序  5.5 对多个键进行排序——不稳定排序的修正方法  5.6 网络排序  5.7 小结:选择一种排序算法  5.8 资源和参考资料 第6章 树  6.1 二叉树   6.1.1 树查找   6.1.2 节点插入   6.1.3 节点删除   6.1.4 二叉查找树的性能   6.1.5 AVL树  6.2 红黑树  6.3 伸展树  6.4 B树   6.4.1 保持B树平衡   6.4.2 实现B树算法   6.4.3 B树实现的代码  6.5 可以看见森林吗  6.6 资源和参考资料 第7章 日期和时间  7.1 日期例程的库  7.2 时间例程  7.3 用于日期和时间数据的格式  7.4 最后的提醒  7.5 资源和参考资料 第8章 任意精度的算术  8.1 构建计算器8.2表示数字  8.3 计算  8.4 加法  8.5 减法  8.6 乘法  8.7 除法  8.8 关于计算器要注意的最后几点  8.9 用于计算平方根的牛顿算法  8.10 分期付款表  8.11 资源和参考资料 第9章 数据压缩  9.1 行程编码  9.2 霍夫曼压缩   9.2.1 代码   9.2.2 其他问题  9.3 滑动窗口压缩  9.4 基于字典的压缩(LZW)   9.4.1 LZW算法的伪代码   9.4.2 LZW压缩的实现   9.4.3 填满字典  9.5 使用哪种压缩方法  9.6 资源和参考资料 第10章 数据完整性和验证  10.1 简单的校验和  10.2 加权校验和  10.3 循环冗余校验   10.3.1 CRCCCITT   10.3.2 CRC16   10.3.3 CRC32   10.4 资源和参考资料

2013-04-26

VC实现打印预览 打印

VC 实现打印预览 打印 打印预览是缩小 放大,以及打印预览一次预览一页与两页等。

2013-01-07

Setup Factory 9 破解汉化版

Setup Factory 9.0.3.0 破解汉化版

2012-12-03

Visual_Assist_X_10.7.1916.0_Patched 支持VS2010

支持VS2010,自己亲自验证过。希望对大家有用。

2012-10-29

VC+移动,复制,删除文件

VC+移动,复制,删除文件 函数和调用实例。

2012-10-23

卓有成效的程序员.pdf

提交开发效率的必备书籍 卓有成效的程序员完整书籍中文版

2012-07-12

C++ 代码实现DES加密解密源代码类

很好用的类,我一直用这个类,里面有单倍双倍加密算法的实现,三倍的可以自己改装使用!

2011-10-30

DES加密算法C++实现(程序+源代码)(附课程设计)

DES加密算法C++实现(程序+源代码)(附课程设计) 绝对可用 !

2011-10-30

VC中调用WebService

一个很好的vc++调用WEBSERVICES的例子,讲的很详细,值得推荐。

2011-09-26

vc6.0下的 tinyxml使用例子

vc6.0下的 tinyxml使用例子,附带tinyxml源代码,简单易学,一看就明白哦

2011-09-26

HTTP协议编程 VC++6.0

HTTP协议编程。基于VC++6.0、可以直接使用

2011-09-23

Visual C++精通MFC程序设计

书加密了,不能复制目录给大家看。人品保证是一本完整的书六百多页。。 1.理解MFC程序设计概念 2.Visual C++ 集成开发环境 3.C++特性

2011-02-18

Visual.C.-Turbo.C串口通信编程实践(光盘源程序)—龚建伟

Visual.C.-Turbo.C串口通信编程实践(光盘源程序)—龚建伟 还有书中介绍的串口调试助手。 对你一定有用。

2011-02-12

深入浅出Visual C++串口编程

深入浅出Visual C++串口编程 串口通信是Windows应用软件开发的重要环节,除了普通的通信软件外,还在工业控制领域有广泛的用途,因此掌握串口编程是每个程序员的必备技巧。 •无庸讳言,目前网上有不少介绍串口通信的文章和代码,但对广大读者而言,缺少入门的、系统的介绍串口编程的教程,因此小编组织了这个教程,它将填补这方面的空白。 深入浅出Visual C++串口编程    RS-232C接口,1970年由美国电子工业协会联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定,全名是"数据终端设备(DTE)和数据通 讯设备(DCE)之间串行二进制数据交换接口技术标准"。本期教程将对DOS平台的串口编程,及Windows平台下基于API、控件和第三方类的串口编 程进行介绍。 深入浅出VC++串口编程之基本概念

2011-01-24

基于C语言的串口通讯程序设计

- 引言 &}l’^’l"标准广泛应用于微型计算机系统和 大型系统中<&}l’^’l"标准具有连线简单3通讯距 离长等优点<虽然所有的标准电缆都适用于微型计 算机<但大多数微型计算机都采用一种改进型的全 双工&}l’^’l"电缆*非标准的+b微型计算机的4z5 端口使用6}.&h集成电路串行4z5驱动器<使得 设计电缆时务必采取谨慎3安全的策略7-8^9b本文将 着重介绍三线多环回型结构电缆的构成及h6&:5 "语言编程实现计算机同串口接收设备之间的通 讯b具有编程简单<通信稳定等特点b

2011-01-24

微软C 编程精粹 Steve Maguire

目 录 序 4 命名约定 6 某些背景 7 引言 8 第1章 假想的编译程序 12 第2章 自己设计并使用断言 20 第3章 为子系统设防 45 第4章 对程序进行逐条跟踪 68 第5章 糖果机界面 76 第6章 风险事业 92 第7章 编码中的假象 116 第8章 剩下来的就是态度问题 134 附录A 编码检查表 149 附录B 内存登录例程 152 附录C 练习答案 160 后记 走向何方 183 序 ……………………………………………………………………………… Ⅰ 某些背景 ……………………………………………………………………… Ⅲ 命名约定 ……………………………………………………………………… Ⅳ 引 言 ………………………………………………………………………… Ⅵ 第1章 假想的编译程序 …………………………………………………… 1 第2章 自己设计并使用断言 ……………………………………………… 8 第3章 为子系统设防 ……………………………………………………… 31 第4章 对程序进行逐条跟踪 ……………………………………………… 53 第5章 糖果机界面 ………………………………………………………… 60 第6章 风险事业 …………………………………………………………… 75 第7章 编码中的假象 ……………………………………………………… 98 第8章 剩下的就是态度问题 ……………………………………………… 115 后 记 走向何方 …………………………………………………………… 129 附录A 编码检查表 …………………………………………………………… 130 附录B 内存登录例程 ………………………………………………………… 133 附录C 练习答案 ……………………………………………………………… 140 参考文献 ……………………………………………………………………

2011-01-22

C语言库函数使用大全CHM版

包含C语言的所有函数,分A到Z,方便查询。。不错的使用工具,喜欢的朋友别忘了顶一下哦

2011-01-22

高质量C++/C 编程指南

目录 前 言 ......................................................................................................................................6 第1 章文件结构....................................................................................................................8 1.1 版权和版本的声明........................................................................................................8 1.2 头文件的结构...............................................................................................................8 1.3 定义文件的结构...........................................................................................................8 1.4 头文件的作用...............................................................................................................8 1.5 目录结构.......................................................................................................................8 第2 章程序的版式................................................................................................................8 2.1 空行 ...............................................................................................................................8 2.2 代码行...........................................................................................................................8 2.3 代码行内的空格...........................................................................................................8 2.4 对齐 ...............................................................................................................................8 2.5 长行拆分.......................................................................................................................8 2.6 修饰符的位置...............................................................................................................8 2.7 注释 ...............................................................................................................................8 2.8 类的版式.......................................................................................................................8 第3 章命名规则....................................................................................................................8 3.1 共性规则.......................................................................................................................8 3.2 简单的 WINDOWS 应用程序命名规则.........................................................................8 3.3 简单的 UNIX 应用程序命名规则..................................................................................8 第4 章表达式和基本语句....................................................................................................8 4.1 运算符的优先级...........................................................................................................8 4.2 复合表达式...................................................................................................................8 4.3 IF 语句...........................................................................................................................8 4.4 循环语句的效率...........................................................................................................8 4.5 FOR 语句的循环控制变量............................................................................................8 4.6 SWITCH 语句..................................................................................................................8 4.7 GOTO 语句......................................................................................................................8 第5 章常量............................................................................................................................8 5.1 为什么需要常量...........................................................................................................8 5.2 CONST 与#DEFINE 的比较...........................................................................................8 5.3 常量定义规则...............................................................................................................8 5.4 类中的常量...................................................................................................................8 第6 章函数设计....................................................................................................................8

2011-01-17

C语言文件操作函数大全

13.1C语言文件 1,两种文件存取方式(输入,输出方式) 顺序存取 直接存取 2,数据的两种存放形式 文本文件 二进制文件 13.2文件指针 定义文件类型指针变量的一般形式: FILE *指针变量名; 例如:

2011-01-17

用C语言实现串口通信技术

用C语言实现串口通信技术  简要介绍了串口和串口通信的基础知识,然后运用c 语言实现了串口通信和联机文件的传输,并详 细阐述了其中的一些重要步骤。使用c 语言实现串行通信连线简单,常用于对实时性要求不高的数据通信系统

2011-01-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除