|
最近在REDHAT5。2中使用了一下 mysql,由于这个数据库的文档 不多,特别是关于编程方面的比较少,又没有例程,因此将一些心
得写出来和大家共享。
mysql 比较简单,但是有这样几个缺点,不支持游标(cursor), 不支持提交(commit)和rollback。加锁的机制也不好,所以我
后来放弃使用了。不过用来建立简单的小数据库还是很方便的。 mysql 的管理员是
root, 将 safe_mysqld执行起来之后,root 使用 mysqlshow 可以看到当前所有的数据库,如
| Databases |
| mysql |
| search |
| test |
再使用 mysqlshow mysql 可以看到 mysql库中的一些table
Database:Mysql
mysql 中用户的概念是 host+user,在不同HOST上的同名USER是两个 不同用户,拥有不同的权限。如果要修改用户权限,添加数据库等,
可以用 mysql mysql 进入这个库进行管理。只要知道一点SQL命令 就可以进行用户和数据库管理。
建立了用户,数据库,密码之后,普通用户就可以进行编程和使用了。
假设拥护名为 yflei,数据库为 data,密码为 foo
则用户可以用 mysqlshow -pfoo data 来看自己有权限读的那个数据库 中的情况。
用 mysql -pfoo data 来登录上去进行维护。 下面只谈编程 接口(C++)
在程序中包含头文件 link 时加上 -lmysqlclient 首先与数据库建立连接: MYSQL
data; MYSQL *pdata; pdata = mysql_connect( data, "localhost", "yflei",
"foo"); localhost 处可以填写主机IP,由于我使用的是本机,因此是localhost
然后选择数据库 mysql_select_db( pdata, "data"); 当然在每次执行之后都别忘了检查正确性,因为有可能你没有权限访问。
断开连接使用 mysql_close( pdata);
查询使用 mysql_query( pdata, sqlcommand);
sqlcommand 是SQL语句,
如: sprintf( sqlcommand, "select * from %s", table_name);
就是一个select 语句。
执行结果可以用以下的两种方法获得:
MYSQL_RES *result;
MYSQL_ROW row;
1。使用 mysql_use_result( pdata);
result = mysql_use_result( pdata); // 上一次查询的结果
row = mysql_fetch_row( result); // 获得结果中的下一条记录
这时,可以不停的取记录,直到 row == NULL 为止。 这种方法不建立临时表,速度快,耗内存少,非常适合只需要对数据
进行简单处理的情况。这种方法的问题在于,当进行处理时,整个table 就不可用了,相当于加锁了(这是我个人的经验,按MYSQL
自带的文档 是这样说明的:Doing this would tie up the server and then other
threads couldn't update the used tables,但是我再次select 时,也 会出现
table XXX temporarily unavailabe的错误)。
2。使用 mysql_store_result( pdata);
result = mysql_use_result( pdata); // 上一次查询的结果
row = mysql_fetch_row( result); // 获得结果中的下一条记录
此时你可以调用 mysql_num_rows来获得查询结果的总记录数,而且表 可以再次利用。但速度比较慢,费内存。
结论:mysql 适合小而简单的数据库,对复杂的操作要求支持不是很好。
由于我只用了一天的时间,对mysql的功能知道的有限,具体的问题请 参看 mysql
自带的文档,本文只供参考。
By Simon Lei. May.30,1999
|