Mysql连接---语言连接和图形化界面

发布于:2025-03-16 ⋅ 阅读:(28) ⋅ 点赞:(0)

语言连接

在已经具备MySQL的基础知识后,需要学习如何进行使用,要用c语言连接mysql,需要使用mysql官网提供的库,用c接口库进行连接。

准备工作:

保证mysql服务有效

在官网上下载合适的mysql connect库

1.安装Connector

在mysql.com官网:

选择downloads,进入MySQL Community (GPL) Downloads »

选择所需语言的连接包:

再选择与自己mysql版本和OS版本匹配的连接包

下载好后导入操作系统,通过库连接,库函数进行使用

或者若在下载mysql时,下载的是mysql-community-server则已经将连接数据库的开发包已经安装好了,或者通过apt /yum install libmysqlclient-dev安装开发包

先退回到根目录,查看/usr/include/mysql路径下的文件

若存在mysql的头文件则表示安装开发包完成

2.测试mysql连接

创建一个.cc文件,使其包含mysql头文件,调用mysql函数:

在编译时,链接到mysql库:

运行可执行程序:

若成功调用库函数,则说明接入成功

3.MySQL接口

查看函数列表:MySQL :: MySQL 5.7 C API Developer Guide :: 4 C API Function Reference

3.1mysql初始化:

MySQL是一套网络服务(TCP/IP),要使用需要先进行初始化

mysql_init(MYSQL * mysql)

成功返回结构体指针,失败返回nullptr

例:

运行后无退出码,也无报错表示初始化成功

初始化完毕之后,必须先链接数据库,才能进行后续操作:

3.2myslq链接(需要先启动mysql服务端):

MYSQL * mysql_real_connect(MYSQL *mysql,conest char *host,

                                     consh char *user,

                                     const char *passwd,

                               const char* db,

                                     unsigned int port,

                                     const char *unix_socket,

                                     unsigned long clientflag);

host是登陆位置,user是创建的mysql用户,passwd是用户对应的密码,db是要访问的数据库,potr是mysql服务器的端口号,unix_socket参数和clientflag设为null和0

成功返回mysql指针,失败返回null

例:

可以在数据库中查看到链接情况,在链接上后,不立刻close而是sleep10秒

链接之前:

链接之后:

增加了一个链接对象。

3.3向mysql下达sql指令:

int mysql_query(MYSQL *mysql,const char* p);

p是要指向的sql语句,如”select * form table”

返回0表示成功,非0表示失败。

通过while循环不断输入sql语句:

执行语句之前:

执行语句:

执行语句之后:

显示插入成功,sql语句执行成功。

也可以通过单条语句对数据库操作:

表中数据成功被修改

若是向表中插入中文数据:

也能插入成功,但是未经过设置可能会出现乱码问题----客户端和服务端编码不一致

可以在链接后,设置的链接默认字符集为utf8,mysql8.0默认是utf8mb4(支持中文),而mysql5.0的默认字符集是latin1(不支持中文)

设置默认字符集为utf8的库函数:

mysql_set_character_set(mysql,”utf8”);

mysql是用于建立链接的MYSQL结构体的指针

也可以执行select语句,但是无结果显示:

因为select后,还需要获取查询到的数据---保存到MYSQL结构体内的结果集。

提取select的结果的函数:

MYSQL_RES*  mysql_store_result(MYSQL *mysql);

返回值为MYSQL_RES结构体指针,失败返回null

select的结果就转到MYSQL_RES结构体内。

MYSQL内接收的select数据并不是整张表而是其中的数据,转存到MYSQL_RES内的也不是表而是表中数据:

可以将MYSQL_RES看作char** 的数组,其中的char**指向的char*指向每一个行数据,有几个char**就有几行,有几个char*就表示有几列(一行有几个数据)。

因此通过行下标和列列进行数据查看,需要进行行数和列数的获取:

获取结果行数:

my_ulonglong mysql_num_rows(MYSQL_RES *res);

获取结果列数:

unsigened int mysql_num_fields(MYSQL_RES* res);

获取列名:

MYSQL_FIELD *mysql_fetch_fiedls(MYSQL_RES* res);

返回值是MYSQL_FIELD类型,可以当中数组使用,如:

MYSQL_FIELD* fields_array=mysql_fetch_fiedls(MYSQL_RES* res);

cout<<ret[0].name<<endl; //输出第零列的列名(配和列数进行遍历)

查看有几行几列,并将结果打印:

能查到正确的行数与列数。

拿到列名:

也有用于直接获取结果内容的函数:

MYSQL_ROW mysql_fetch_row(MYSQL_RES * res);

返回一个MYSQL_ROW结构体,相当于一个char**类型的指针,拿到一行的数据,每调用一次就会通过自身的计数器拿下一行的数据,可以配合行数,列数对结果集进行遍历:

3.4释放MYSQL_RES中的结果集:

void mysql_free_result(MYSQL_RES * result);

3.5关闭mysql链接:

void mysql_close(MYSQL* sock);

图形化界面连接方式:

官方图形化界面推荐:MySQL workbench(mysql官网下载)

MySQL :: Download MySQL Workbench

下载window版

下载好后

点击+号添加链接:

注意:在用云服务器进行登陆时,需要将mysql服务器的端口号设置进安全组。

点击进入:

查看数据库结构

输入sql语句后,选中,点击闪电符合指向选中sql语句:

按住ctl滚动滑轮可以进行缩放。

在select * from table_name;后可以直接在展示的表结果上进行修改插入等,通过apply进行提交,但是若表无主键,唯一键索引则不能进行这种操作,而是read only

解决方法包括为表添加主键或唯一键、使用 SQL 语句手动编辑、导出数据编辑或使用其他工具。

如果表设计允许,建议为表添加主键,以确保数据的完整性和可操作性。

添加主键后,就能对select*的结果直接进行修改:

点击apply进行提交:

不进行使用时关闭数据库,避免被黑入。