mysql实际使用思路
在熟悉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[]; //存放查询sql语句字符串 if (argc != ) { //检查输入参数
fprintf(stderr,"usage : mysql_select <userid>\n\n");
exit();
} mysql_init(&mysql);
if (!(sock = mysql_real_connect(&mysql,"localhost","dbuser","dbpwd","9tmd_bbs_utf8",,NULL,))) {
fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(&mysql));
perror("");
exit();
} sprintf(qbuf,SELECT_QUERY,atoi(argv[]));
if(mysql_query(sock,qbuf)) {
fprintf(stderr,"Query failed (%s)\n",mysql_error(sock));
exit();
} if (!(res=mysql_store_result(sock))) {
fprintf(stderr,"Couldn't get result from %s\n", mysql_error(sock));
exit();
} 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[]),(((row[]==NULL)&&(!strlen(row[]))) ? "NULL" : row[])) ;
puts( "query ok !\n" ) ;
} mysql_free_result(res);
mysql_close(sock);
exit();
return ; //. 为了兼容大部分的编译器加入此行
}
编译的时候,使用下面的命令
运行的时候,执行下面的命令
将返回如下结果:
Ther userid #1 's username is: Michael
query ok !
- 注意事务的四个特性,原子、一致性、隔离、永久性。
- 在代码中体现在,关闭自动提交功能,
- 所有数据库操作完成之后要commit或rollback,并注意抛出异常,
- 数据库引擎要用innodb,因为它支持事务并支持外来键,而MYISAM、ISAM不支持外来键和事务操作,它们优势是ISAM针对数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源;MYISAM在ISAM基础上快速读取操作,适合WEB项目,缺陷就是不能在表损坏后恢复数据;
mysql实际使用思路的更多相关文章
- mysql简单优化思路
mysql简单优化思路 作为开发人员,数据库知识掌握的可能不是很深入,但是一些基本的技能还是要有时间学习一下的.作为一个数据库菜鸟,厚着脸皮来总结一下 mysql 的基本的不能再基本的优化方法. 为了 ...
- MYSQL学习笔记——数据库范式及MYSQL优化整体思路
一.数据库范式 为了建立冗余较小.结构合理的 ...
- 使用Go语言操作MySQL数据库的思路与步骤
最近在做注册登录服务时,学习用Go语言操作MySQL数据库实现用户数据的增删改查,现将个人学习心得总结如下,另外附有代码仓库地址,欢迎各位有兴趣的fork. 软件环境:Goland.Navicat f ...
- mysql主从配置思路
记录一下 原文:http://www.rjfw.com.cn/qamain/prevView.action?id=40482017200000031 mysql主从配置(清晰的思路) mysql主从配 ...
- mysql性能排查思路
mysql性能瓶颈排查 top/free/vmstat/sar/mpstat 查看mysqld进程的cpu消耗占比 确认mysql进程的cpu消耗是%user, 还是sys%高 确认是否是物理内存 ...
- mysql 性能优化思路 - mysqldumpslow /tmp/mysql-slow.log 字符集 utf-8 create database
提高MySQL服务的性能,响应速度: 1.替换有问题的硬件:内存,CPU,磁盘 2.服务的配置参数的配置 3.SQL的优化 .服务参数的配置: 1.1 连接数,连接超时: max_connection ...
- mysql数据库优化思路
1.设置合适的主键和索引. (1).设置主键和索引的字段尽量不要选取经常修改的字段,同时索引的个数一般不宜超过6个: (2).sql语句中like “%str%” 不支持索引, "str% ...
- mysql并行复制降低主从同步延时的思路与启示
一.缘起 mysql主从复制,读写分离是互联网用的非常多的mysql架构,主从复制最令人诟病的地方就是,在数据量较大并发量较大的场景下,主从延时会比较严重. 为什么mysql主从延时这么大? 回答:从 ...
- 【58沈剑架构系列】mysql并行复制优化思路
一.缘起 mysql主从复制,读写分离是互联网用的非常多的mysql架构,主从复制最令人诟病的地方就是,在数据量较大并发量较大的场景下,主从延时会比较严重. 为什么mysql主从延时这么大? 回答:从 ...
随机推荐
- 活动窗口(Active),焦点窗口(Focus)和前景窗口(Foreground)之间的关系
活动窗口(Active),焦点窗口(Focus)和前景窗口(Foreground)之间的关系 任何一个时候,我们的Windows桌面上总有一个最前台的窗口,其实说简单的,就是标题栏变成深蓝色的那个窗口 ...
- Exchange Version and UpdateRollups
Exchange Server 2010 Product name Build number Date KB Microsoft Exchange Server 2010 RTM 14.0.639.2 ...
- Audit File Delete
OPEN 4656 ACCESS 4663 AN OBJECT WAS DELETED 4660 CLOSE 4658 1537 = Delete 1538 = Read_CONTROL 1541 ...
- ios 画图总结
0 CGContextRef context = UIGraphicsGetCurrentContext(); 设置上下文1 CGContextMoveToPoint 开始画线2 CGContextA ...
- php 问题及原因总结
1.php 加水印时出现问题的原因 :或许某个参数输入错误,导致页面一点反应都没有.
- php 正则表达式三.模式修正
1.贪婪模式和懒惰模式, 贪婪模式:php中正则默认是贪婪模式,匹配尽可能多 的字符,比如 $pattern='/a+b/'; $subject='aaaaaaaaab,那么可能会preg_match ...
- curl post CURLOPT_POSTFIELDS
PHP: curl_setopt - Manual http://php.net/manual/en/function.curl-setopt.php CURLOPT_POST TRUE to do ...
- 转!!Tomcat网站上的core和deployer的区别
转自:https://www.cnblogs.com/guxia/p/6678184.html 8.5.13 Please see the README file for packaging info ...
- 基于UDP的套接字、粘包问题
一.基于UDP的套接字 UDP服务端 ss = socket() #创建一个服务器的套接字 ss.bind() #绑定服务器套接字 inf_loop: #服务器无限循环 cs = ss.recvfro ...
- sql server等待类型
sql server 各种等待类型-转 sql server各个等待类型及解决办法:https://www.sqlskills.com/help/waits/writelog/其他等待类型的描述和解决 ...