做网站的组要具备哪些素质,建英文网站,廊坊自助建站设计,巴中商城网站建设博客主页#xff1a;花果山~程序猿-CSDN博客 文章分栏#xff1a;MySQL之旅_花果山~程序猿的博客-CSDN博客 关注我一起学习#xff0c;一起进步#xff0c;一起探索编程的无限可能吧#xff01;让我们一起努力#xff0c;一起成长#xff01; 目录
一.配置开发环境
二… 博客主页花果山~程序猿-CSDN博客 文章分栏MySQL之旅_花果山~程序猿的博客-CSDN博客 关注我一起学习一起进步一起探索编程的无限可能吧让我们一起努力一起成长 目录
一.配置开发环境
二接口介绍
1. mysql_init
2.mysql_real_connect
3. mysql_query
4.对select结果分析
1mysql_store_result
2像mysql一样查看mysql数据
提取数据
提取属性名
三图形化界面方式连接MYSQL 嗨收到一张超美的图愿你每天都能顺心 一.配置开发环境
我们是要使用C/C语言在代码层面对MySQL进行连接操作我们就需要其头文件 源码库按照我们之前学的关于如何使用第三方库可以参考本博客 使用第三库操作详解【Linux】【软硬链接 | 动静态库 | 使用第三库】_linux下stderr的头文件-CSDN博客 但以目前我们学到这里这种步骤成功性还是无法保证因为我们可以通过安装mysql会自动代入我们需要的环境。
因此首先我们是安装mysql软件可以参考本篇博客 centos7.6安装mysql-CSDN博客 下载完成后我们通过下面指令来查看是否有devel开发库 rpm -qa | grep mysql
如果devel有那么我们就可以直接正常编程了编译的时候指定一下源码库即可如 -L/lib64/mysql -lmysqlclient; 如果没有devel那么我们需要安装一个开发库通过下面代码 yum install -y mysql-community-devel 如果无法安装devel(开发库)还可以到官网下载开发包再上传到Linux但是不推荐怎么做因为可能会因为开发包和自己MySQL的版本不同而出现各种奇奇怪怪的问题如ssl证书问题套接字问题…… 下面我们可以手动查一下是否有头文件 源码库
二接口介绍 这里就只提一些C语言常用接口有需要的可以直接找文档MySQL :: MySQL 5.7 C API Developer Guide :: 4 C API Function Reference
1. mysql_init
信息mysql_init函数是用于初始化一个MYSQL结构体的这个结构体用来存储连接MySQL服务器所需的信息以及连接后的状态信息。 MYSQL *mysql_init(MYSQL *mysql); // 如果第一次初始设置为nullptr即可 返回值成功时返回指向初始化后的MYSQL结构体的指针。如果分配新对象时失败则返回NULL 2.mysql_real_connect
与mysql服务端建立连接首先我们要有mysqld的账号。 如果通过我们写的程序来连接服务端那我们就成了客户端了我觉得没这个必要我们想通过程序来进行简化对mysql命令的操作实现自动化提高效率。 MYSQL* mysql_real_connect(MYSQL *mysql, //初始化好的mysql*结构体const char *host, // 登录主机const char *user, // 用户const char *passwd, // 密码const char *db, // 默认进入的库名, 可以为nullptrunsigned int port, // 服务器端口号const char *unix_socket, // 套接字种类一般是域间套接字,可以默认为nullptrunsigned long client_flag) // 默认为0 返回值成功时返回mysql填入的初始化结构体指针失败返回nullptr 关于C连接mysql编码集的问题 我们知道已经设置了服务器的默认编码集:utf8但C连接mysql的编码集默认是latin1,不支持中文因此我们需要修改默认编码集。 int mysql_set_character_set(MYSQL *mysql, const char *csname) // csname 可为 utf8 3. mysql_query
在我们在mysql中创建表后我们就可以通过mysql_query来向mysql发送mysql指令 int mysql_query(MYSQL *mysql, const char *stmt_str) --mysql语句 返回值成功返回0失败返回其他值
最简单的就是增删改案例如下
mysql_set_character_set(my_sql, utf8);std::string query insert people values(张三, 12345, 1), (李四, 520, 2);// query delete from people where name 张三;// query update people set phone1314 where id2if (mysql_query(my_sql, query.c_str())){std::cout insert fail std::endl;fprintf(stderr, 错误原因%s, mysql_error(my_sql));} 就数增删改比较简单因为就只有两种结果。难的是对select 内容如何分析。 4.对select结果分析
1mysql_store_result
功能该变量会开辟块空间专门在内存中接收查询出来的结果作为未来函数的数据来源。 MYSQL_RES* mysql_store_result(MYSQL *mysql) 怎么理解这个新的返回类型MYSQL_RES我们可以这样简单的理解简单理解来说是一个 char**的数组
该函数会调用 MYSQL 变量中的 st_mysql_methods 中的 read_rows 函数指针来获取查询的结果。 同时该函数会返回 MYSQL_RES 这样一个变量该变量主要用于保存查询的结果。 同时该函数 malloc 了一片内存空间来存储查询过来的数据所以我们一定要记的 free(result), 不然是肯定会造成内存泄漏的。 调用的free结果集的函数是 void mysql_free_result (MYSQL_RES *result) 2像mysql一样查看mysql数据 在上面我们大概知道了MySQL_RES的基本结构同时mysql也是通过C/C实现模拟mysql客户端打印结果并不难学习步骤如下 获取行列 my_ulonglong mysql_num_rows ( MYSQL_RES * res ); -- 获取行 // my_ulonglong 就是 unsigned long long my_ulonglong mysql_num_fields ( MYSQL_RES * res ); -- 获取列 提取数据
如何循环获取MYSQL_RES中的内容先了解下面两个接口 MYSQL_ROW mysql_fetch_row (MYSQL_RES *result) 功能每次调用返回列的起始地址并向后移动一位。通过查看MYSQL_ROW的源代码可知 mysql_fetch_row类似于迭代器的函数每次调用将自动“”往后移动
截取的案例 MYSQL_ROW line 0;for (int n 0; n rows; n){line mysql_fetch_row(result);for (int k 0; k field; k){std::cout line[k] \t;}std::cout std::endl;}
提取属性名 上面我们能查找到内容但并没有属性框也就是不知道每个列名可以通过下面函数进行获取 MYSQL_FIELD * mysql_fetch_field (MYSQL_RES *result) 返回值返回一个结构体指针该结构体里存放着每个列的属性数据。
使用案例 MYSQL_FIELD* qual mysql_fetch_field(result);for (int j 0; j field; j){std::cout qual[j].name \t;}std::cout std::endl; 另外 mysql C api 还支持事务等常用操作大家下来自行了解 : my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode); my_bool STDCALL mysql_commit(MYSQL * mysql); my_bool STDCALL mysql_rollback(MYSQL * mysql); 三图形化界面方式连接MYSQL 使用mysql我们已经可以通过1.通过mysql客户端命令行操作。2. C语言代码方式连接mysql 第三种就是使用最简单的图形化界面方式来操作mysql。
使用比较好推荐
1.PHPMyandmin免费体验良好
安装流程CentOS7 安装 phpMyAdmin - helloliyh - 博客园 (cnblogs.com)
亲测基本上没有遇到啥问题需要的注意点就是买的服务器不仅需要修改自己的防火墙而且需要在服务器控制台添加安全组
使用教程phpMyAdmin使用教程-CSDN博客 2.Navicat收费但魔法体验良好
3.Mysql workbench官方标配免费但体验一般 mysql知识先到这里了江湖见 结语 本小节就到这里了感谢小伙伴的浏览如果有什么建议欢迎在评论区评论如果给小伙伴带来一些收获请动动你发财的小手点个免费的赞你的点赞和关注永远是博主创作的动力源泉。