您的位置:首页 > 数据库 > MySQL

mysql实际使用思路

2015-08-19 14:11 627 查看
在熟悉mysql语法的基础上,想在自己的应用程序中使用它,应该怎么操作呢?

自然的想法就是找到相应语言的mysql接口,然后熟悉接口,对其进行调用。

具体的做法与思路如下:

找到C的mysql接口

新建MYSQL对象mysql

利用接口函数初始化对象 mysql_init(&mysql);

利用接口将数据库对象与实际数据库建立连接MYSQL *sock = mysql_real_connect(&mysql,"localhost","dbuser","dbpwd","9tmd_bbs_utf8",0,NULL,0),sock为连接句柄(句柄存放的是如窗口、按钮、图标等实例的内存地址,由于这些内存地址在内存并不是一层不变的,因此WINDOS提出句柄概念,它是一种智能指针,类似户籍管理)

连接建立成功后就可以对数据库进行操作

查询mysql_query(sock,sqlbuf);

存放查询结果 MYSQL_RES *res=mysql_store_result(sock);

对查询结果进行操作,类似操作数据库中表,操作以行为单位进行,mysql_num_fields(res)可得行数, MYSQL_ROW row= mysql_fetch_row(res)得到每行的内容

操作完结果后,将其从内存中释放,mysql_free_result(res);

最后关闭数据库句柄mysql_close(sock);完成对数据库的操作

具体实际代码如下:

下面这段代码实现了连接到本地MySQL服务器上9tmd_bbs_utf8数据库,从数据表tbb_user中根据输入的userid取得该用户的用户名并打印输出到终端。

#if defined(_WIN32) || defined(_WIN64) //为了支持windows平台上的编译
#include <windows.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include "mysql.h"  //我的机器上该文件在/usr/local/include/mysql下

//定义数据库操作的宏,也可以不定义留着后面直接写进代码
#define SELECT_QUERY "select username from tbb_user where userid = %d"

int main(int argc, char **argv) //char **argv 相当于 char *argv[]
{
MYSQL mysql,*sock;    //定义数据库连接的句柄,它被用于几乎所有的MySQL函数
MYSQL_RES *res;       //查询结果集,结构类型
MYSQL_FIELD *fd ;     //包含字段信息的结构
MYSQL_ROW row ;       //存放一行查询结果的字符串数组
char qbuf[160];      //存放查询sql语句字符串

if (argc != 2) { //检查输入参数
fprintf(stderr,"usage : mysql_select <userid>\n\n");
exit(1);
}

mysql_init(&mysql);
if (!(sock = mysql_real_connect(&mysql,"localhost","dbuser","dbpwd","9tmd_bbs_utf8",0,NULL,0))) {
fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(&mysql));
perror("");
exit(1);
}

sprintf(qbuf,SELECT_QUERY,atoi(argv[1]));
if(mysql_query(sock,qbuf)) {
fprintf(stderr,"Query failed (%s)\n",mysql_error(sock));
exit(1);
}

if (!(res=mysql_store_result(sock))) {
fprintf(stderr,"Couldn't get result from %s\n", mysql_error(sock));
exit(1);
}

printf("number of fields returned: %d\n",mysql_num_fields(res));

while (row = mysql_fetch_row(res)) {
printf("Ther userid #%d 's username is: %s\n", atoi(argv[1]),(((row[0]==NULL)&&(!strlen(row[0]))) ? "NULL" : row[0])) ;
puts( "query ok !\n" ) ;
}

mysql_free_result(res);
mysql_close(sock);
exit(0);
return 0;   //. 为了兼容大部分的编译器加入此行
}


View Code
编译的时候,使用下面的命令

gcc -o mysql_select ./mysql_select.c -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient (-lz) (-lm) 后面两个选项可选,根据您的环境情况

运行的时候,执行下面的命令

./mysql_select 1

将返回如下结果:

number of fields returned: 1
Ther userid #1 's username is: Michael
query ok !

C与mysql实例如上,其它语言也都大同小异,比如python与mysql,python针对mysql没有接口,因为它的数据库接口是面象sql,mysql,oracle通用接口。
在用到事务时,要

注意事务的四个特性,原子、一致性、隔离、永久性。

在代码中体现在,关闭自动提交功能,

所有数据库操作完成之后要commit或rollback,并注意抛出异常,

数据库引擎要用innodb,因为它支持事务并支持外来键,而MYISAM、ISAM不支持外来键和事务操作,它们优势是ISAM针对数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源;MYISAM在ISAM基础上快速读取操作,适合WEB项目,缺陷就是不能在表损坏后恢复数据;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: