主要介绍mysql在windows下的安装以及一些基本的应用.并且介绍了其CAPI的使用.一, mysql的安装和使用。
1, 安装mysql,http://dev.mysql.com/downloads/下载mysql-4.0.23-win.zip,听说这个版本比较稳定,曾经下载过mysql-4.1.7-win.zip,但是不好用,老是启动的时候提示进程意外终止,下载完以后就一路next拉。
2, 启动mysql,进入c:\mysql\bin,点击winmysqladmin就好了,第一次进去的时候会要求填入用户名和密码的,以便在系统目录下生成my.ini文件。所以要注意在卸载mysql的时候一定要搜索一下my.ini,并且把他删除,免得他影响下一次的安装。不过以后启动就用net start mysql,关闭使用net stop mysql就好了。可以输入c:\mysql\bin\mysql来测试一下。
3, 用户管理,刚安装的时候只有两个用户,一个是root,一个是空,他们的密码都为空。我们先为root来设置口令。C:\mysql\bin\mysqladmin -u root password "1234567"。 mysql -u root -p.输入密码以后就可以看见mysql提示符了,
show databases;查看所有的数据库,记得一定要打后面的分号,回车只是换行。
use mysql; 选择数据库mysql,
show tables from mysql; 查看数据库mysql中的所有表格,在user表格中就记录了用户名,密码,用户权限等信息。
Select host,password,user from user; user里面列数太多了,看到这三个信息就差不多了,里面列出来了所有的用户名,以及允许登陆的地址。在这里先删除匿名用户,delete from user where user="",接着把host不是本地的删除,delete form user where host=www.*.com,现在就只剩下一个root用户可以从本地登陆我的数据库了。下面添加一个常用的用户,假定该用户可以从任意地址登录,并且拥有所有的权限,grant all privileges on *.* to sagely@"%" identified by ‘密码' with GRANT OPTION。再一次Select host,password,user from user;就可以看到多了一个sagely用户,他可以从任何地址登录,至于添加别的用户也是同理,只是可能权限控制不同,可以使用插入user中一条记录来实现,譬如insert into user values(‘localhost','sage',PASSWORD(‘123'),'Y','Y','Y','Y',,,,,);来实现,具体的Y还是N依照权限而定。这样就实现了对mysql数据库用户的管理。
4, 数据的插入、删除,修改和查询。
在这一部分,主要是应用了SQL语句。(在mysql命令行下)
create database ra; 创建一个名为ra的数据库。
Use ra; Create table usr_info(c varchar(15),st varchar(15),l varchar(15),o varchar(15),u varchar(15),cn varchar(15))创建一个名为usr_info的表,在表中有6个属性。
Insert into usr_info values("cn","dd","dd","dd","ee","ee")插入具体数据。等等,具体都和SQL语句是一样的。
二 ,C API的使用
1, 环境的设定
在VC里的toos->option->directories中将include增加一个c:\mysql\include,将lib增加一个c:\mysql\lib,将libmysql.dll和libmysql.lib拷到当前目录下,并且把libmysql.lib增加到工程中。
2, 建立与服务器的连接。
Include <mysql.h> //包含头文件
MYSQL *conn;//定义一个MYSQL类型结构,这个几乎在所有的后面的编程中都需要
MYSQL *mysql_init(MYSQL *conn);//如果conn=NULL,返回一个新分配的句柄结构返回,反之则重新初始化该结构,出现错误则返回NULL;
MYSQL *mysql_real_connect(MYSQL * connection,const char *server_host,const char *sql_urs_name,const char *sql_password,const char *db_name,unsigned int port_number,const char *unix_socket_name,unsigned int flags);//连接MYSQL服务器,里面的参数应该很清楚了,一般port_number和unix_socket_name的值为0和NULL。例如:
mysql_real_connect(conn_ptr,"localhost","sagely","secret","ra",0,NULL,0);
void mysql_close(MYSQL *connection);关闭一个连接。
3, 执行SQL语句
mysql_select_db(MYSQL *connection,const char *db_name);选定某个数据库。
int mysql_query(MYSQL *connection,const char *query)//他将执行query语句,运行成功将返回0,例如mysql_query(conn_ptr, Create table cert_info(...),将创建一个名为cert_info的表,几乎所有的SQL语句都能这么执行。呵呵,是不是显得很简单,他就和命令行中输入的SQL语句差不多。在使用上面函数的时候一般会使用
my_ulonglong mysql_affected_rows(MYSQL *connection),这个函数返回的是mysql_query对进行改动的行的数量。
4, 处理检索到的数据
当我们可以执行SQL语句以后,那么就很容易执行增加删除修改等操作,但是假若检索出来的数据存储在哪里呢?
MYSQL_RES *mysql_use_result(MYSQL *connection)这个函数得到一个连接对象返回一个结果集合指针,出错时返回NULL。不过他只是返回一个集合对象初始化来接收数据,并没有将任何检索到的数据返回到结果集合中。
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)这个函数获得mysql_use_resul得到的结果结构体,并从中检索单个行,并返回分配给行结构体的数据,没有更多数据或出错时,返回NULL。
Unsigned int mysql_field_count(MYSQL *connection)它得到一个连接对象并返回在集合中字段的数目。
于是有上面的基础我们就可以理解下面这段了:(没有错误处理)
mysql_init(&conn_ptr);
mysql_real_connect(conn_ptr,"localhost","sagely","secret","ra",0,NULL,0);
mysql_query(conn_ptr,"SELECT * form usr_info);
res_ptr=mysql_use_result(&conn_ptr);
sqlrow=mysql_fetch_row(res_ptr);
for(int i=0;i<mysql_field_count(&conn_ptr);i++){printf("%s ",sqlrow);}
MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)它返回的是列的信息,比如列的名称,列所在表名称等等,有了这个就可以将列标题与数据想对应起来了。