- 论坛徽章:
- 0
|
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
st1\:*{behavior:url(#ieooui) }
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
欢迎转载,请保留作者信息
bill@华中科技大学
http://billstone.cublog.cn
“ Just do one
thing,do it well! ”
两个最著名的开源RDBMS应用软件是PostgreSQL和MySQL。PostgreSQL能在任何情况下免费使用。MySQL在某些情况下需要收取许可费用。本书专注于MySQL,《Linux高级程序设计》对PostgreSQL有所涉及,同时你可以在
www.postgresql.org
上找到更多详细资料。
安装MySQL
一般情况下,在你安装的Linux套件中会有MySQL软件包。当你发现系统上没有安装MySQL时你就需要自己去手动安装了。安装方法一般分为两种:rpm软件包分发和源代码分发。对于如何使用rpm二进制软件分发方式安装MySQL,网上有篇
帖子
介绍了在RedHat 9上的详细安装步骤;对于源代码分发方式,你可以参照源代码目录中INSTALL_BINARY文件。
在MySQL的安装过程中,安装脚本会为你自动创建一个初始数据库。同样,你也能得到一个用于启动和停止服务器的init.d脚本(通常在/etc/rc.d/init.d目录中)mysqld或mysql。通常情况下,在特定Linux发行版上查找数据库文件最简单的方法就是,在init.d目录中找到这个脚本并查看它的内容。标准路径和定义位于脚本的开头,你可以很容易地看到文件都被放在哪里了。
你也可以使用chkconfig命令来设置MySQL服务器的运行方式。该命令提供了一种更简单的方式来设置一个服务的运行级别。比如说,为了设置MySQL服务器在运行级别3和4上运行,可以按下面命令设置:
[billstone@ubuntu
~]$ chkconfig --add mysql
// 首先将mysql添加为chkconfig管理的服务
[billstone@ubuntu
~]$ chkconfig --level 34 mysql on
// 在级别3和4上将mysql服务设置为开启状态(on)
[billstone@ubuntu
~]$ chkconfig --level 01256 mysql off
// 在其他级别上将mysql服务设置为关闭状态(off)
安装之后,可以以root身份使用/etc/rc.d/init.d/mysql start命令来手动启动服务器。MySQL在安装过程中还会创建用户mysql,在默认情况下,MySQL服务器进程将以此用户的身份来运行。
当MySQL安装完成后,你可以使用下面的命令进入控制台
[billstone@ubuntu
~]$ mysql -u root mysql
在控制台上,你可以输入\s获得关于MySQL服务器的信息;当然你也可以使用mysqladmin命令来查看服务器的信息。
[billstone@ubuntu
~]$ mysqladmin -u root version
注意:MySQL的root用户和系统的root用户(超级用户)没有任何关联。对于Linux系统来说,除非绝对需要,否则使用root账号来登录MySQL是一个不好的习惯,所以你应该为日常使用添加一个普通用户。
管理MySQL
MySQL有一系列有用的工具程序来完成管理工作。
myisamchk命令:用来检查和修复使用默认MYISAM表格格式的任何数据表格,MYISAM表格格式由MySQL自身支持。
mysql命令:这是MySQL主要的也是唯一完全交互式的命令行工具。当然你也可以用重定向方式读入sql文件以非交互式模式来运行sql命令:
[billstone@ubuntu
~]$ mysql -u rick –p bar foo
mysqladmin命令:可以快速进行MySQL数据库管理。可以完成创建数据库、删除数据库、更改密码和查看状态等操作。
mysqldump命令:可以以SQL命令集的形式把部分或整个数据库导出到一个单独文件中;同时该文件也能被重新导入MySQL或其他的SQL RDBMS。
mysqlimport命令:与mysqldump对应的一个工具。
如果你是MySQL管理员,就必须维护用户信息。从MySQL 3.22开始,可以在MySQL控制台中使用grant和revoke命令管理用户。详细情况请参照MySQL用户手册。
提示:MySQL有一个叫做MySQL GUI的图形工具。如果你实在不喜欢文本方式下的操作,可以选择使用这个图形工具。
使用C语言访问MySQL
C语言提供了一系列mysql例程来完成对mysql数据库的操作,下面是一个典型的连接例程:
#include
#include
#include
#include
"mysql.h"
int
main()
{
MYSQL * pConn;
pConn = mysql_init(NULL);
assert(pConn != NULL);
if(mysql_real_connect(pConn,
"localhost", "rick1", "123", "foo",
0, NULL, 0))
printf("Connection
success!\n");
else
printf("Connection
fail!\n");
mysql_close(pConn);
return 0;
}
在编译上面程序之前,需要在MySQL服务器上创建一个新的数据库foo,并且创建用户rick1,在MySQL客户端上命令如下
mysql
> grant ALL on foo.* to rick1@localhost identified by “123”
要使用C语言连接MySQL数据库,首先调用mysql_init函数初始化连接句柄,如果出错,返回NULL;调用mysql_read_connect创建实际连接,如果连接失败,返回NULL。
当完成连接后,通常在程序正常退出前,需要调用mysql_close关闭连接。
在上面的例程中,我们使用了assert断言来确保mysql接口调用后的有效性。实际上,为了获得更多的错误信息,我们应该使用mysql_errno和mysql_error函数。
当编译该例程时,你很有可能需要添加头文件路径和库文件路径,并且需要指定链接的库模块mysqlclient。在某些系统上,你可能还需要使用-lz选项来链接压缩库。
注意:当运行该例程时,一定要保证链接库文件libmysqlclient.so.16在有效的LIB路径(比如/usr/lib路径)上。
使用C语言接口操作MySQL数据库,实际上就是执行sql语句。实际编程中,我们使用mysql_query或者mysql_real_query执行sql语句。要获取sql语句的执行结果,我们使用mysql_store_result或者mysql_use_result函数,其中,前者一次性提取所有数据并将其存储在MYSQL_RES结构中,而后者则一次提取一行数据,同样存储在MYSQL_RES结构中。调用mysql_num_rows函数将得到结果集中的行数。在得到MYSQL_RES结构后,则循环调用mysql_fetch_row获取一行执行结果保存为MYSQL_ROW结构,要想提取列数据,只需对MYSQL_ROW结构进行下标操作,下面是一个典型例程:
#include
#include
#include
#include
"mysql.h"
MYSQL
*pConn;
MYSQL_RES
*res_ptr; // 执行结果集
MYSQL_ROW
sqlrow; // 从执行结果集中获取的一行结果
void
display_row(){
unsigned int count;
count = 0;
while(count
printf("%s ",
sqlrow[count]); // 从一行执行结果中读出列数据
count++;
}
printf("\n");
}
int
main()
{
int res;
pConn = mysql_init(NULL);
assert(pConn != NULL);
if(mysql_real_connect(pConn,
"localhost", "rick1", "123", "foo",
0, NULL, 0)){
printf("Connection
success!\n");
res = mysql_query(pConn,
"select * from children"); // 执行sql语句
if(!res){
res_ptr =
mysql_store_result(pConn); // 获取执行结果集
if(res_ptr){
printf("Get %lu rows\n", (unsigned
long)mysql_num_rows(res_ptr));
while((sqlrow
= mysql_fetch_row(res_ptr))){ // 从执行结果读取一行执行结果
printf("Fetching data ...\n");
display_row();
}
}
mysql_free_result(res_ptr); // 释放执行结果集
}
else
printf("Select
error %s!\n", mysql_error(pConn));
}
else
printf("Connection
fail!\n");
mysql_close(pConn);
return 0;
}
在执行上述例程前,需要在foo数据库中完成children表的创建和数据插入操作。你可以选择直接在MySQL控制台上执行sql语句,也可以执行存储了sql语句的文件。定义如下,你可以多写入几行数据
create
table children(
childno int(11) not null
auto_increment,
fname varchar(30),
age int(11),
primary key (childno)
);
insert
into children values(1, 'Jenny', 17);
insert
into children values(2, 'Andrew', 13);
详细的MySQL编程接口可以自行查看手册。本章最后展示了CD唱片应用程序的完整代码。它详细地描述了如何设计MySQL数据库以及使用C语言接口来完成数据的存储和访问,为我们自己设计使用MySQL数据库带来了很大的帮助。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/47687/showart_1993421.html |
|